最新GNU head 与 tail 的带符号行数:同样写二,为什么得到四种范围 从导出文件删除表头和尾部汇总,乍看只需要一个数字。但head与tail对行数前面的符号有各自语义:前几行、末几行、排除末几行以及从某行开始,是四个不同的范围。把数字都写成二,有助于看出差异来自选项规则,而不是样本长度... yunqueblog/ 技术教程/ 2026-10-04/ 2 阅读
awk 字段重建实战:只给第二列重新赋值,为什么整行空格都变了 处理一份命令行报表时,只想修正第二列,却发现行首缩进、列间对齐和行尾空格全部消失。问题往往发生在字段赋值的那一刻:awk既保存整条记录,也提供拆开的字段;两种表示之间存在明确的重建规则。理解这一步,才能判断脚本适合编... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Python textwrap.indent 的空白行:都加了前缀,为什么段落中间仍然缺两处标记 给一段诊断文本逐行加上引用标记,首尾两行正常,段落中间却没有标记。检查发现,一行完全为空,另一行只含两个空格。textwrap.indent默认只为并非全由空白组成的行添加前缀,所以“把整段文字传进去”不意味着每一行... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
Bash read 的大小写 N:都写三,为什么一个停在换行前,一个把换行读了进去 读取终端或管道的小块文本时,read -n 3与read -N 3只差一个字母大小写,却不是同一种限制。小写n允许在达到字符上限之前遇到分隔符就结束;大写N则把普通分隔符当作读取内容,尝试收满指定字符数,输入结束或超... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python dedent 的共同缩进:看起来对齐的制表符和空格,为什么一格也没有删 把多行提示文字放进函数里的三引号字符串,前面为了源码整齐加了缩进。调用 textwrap.dedent 后,大部分模板能顶格,另一个模板却原样保留了缩进。编辑器里各行看起来齐平,不代表开头字符相同:一行用制表符,一行... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Python shorten 的空白折叠:文字还没超长,为什么换行已经不见了 给日志列表生成一行预览时,原文只有十几个字符,宽度设成一百,换行和连续空格却仍然消失。检查长度没有发现截断,容易误以为数据在读入时损坏。实际变化可能发生在 textwrap.shorten:它先整理空白,再判断是否需... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Bash 命令替换会删掉末尾换行:加了双引号为什么仍然少几个字符 脚本把命令输出放进变量,再原样写回文件,结果文件末尾的空行没了。变量两边明明加了双引号,为什么仍会改变内容?原因可能发生在引用之前:常用的美元括号命令替换,会移除输出末尾连续的换行字符,双引号并不能撤销这一步。这种规... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 逐行读取文本:保住空格、反斜杠和没有换行的最后一条 看见四条内容,循环却只处理三条读取一份手工编辑的文本清单时,最后一条明明看得见,循环却没有执行它。常见原因是文件末尾没有换行符:read 已经把末尾字符放进变量,但由于遇到文件结束而返回非零。如果循环只依据退出状态决... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python Unicode 规范化:看起来一样的文字,为什么比较不相等 从网页复制的名字与数据库里的名字看起来一致,等号却返回假,未必是编码损坏。有些文字能用一个预组合码点表示,也能用基础字母加组合符号表示。Python 字符串比较检查码点序列,不会替你决定这些形式是否应视作同一个业务名... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读