GNU cut 的无分隔符行:只要第二列,为什么整行header也跑进结果 从冒号分隔的状态文件提取第二列,结果除了ready和pending,还混进一条header。原行没有冒号,按常识似乎不该有第二列;但cut默认会原样打印完全不含字段分隔符的行。这条约定很适合某些保留说明行的场景,也会... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU paste 分隔符轮换:写了两个字符,为什么没有把它们一起插入 想在两列之间插入一个由逗号和竖线组成的分隔串,给paste传入-d之后,输出却是有的地方逗号、有的地方竖线。原因在于这个参数是一组轮换使用的分隔字符,不是每次整体复制的字符串。再加上并行与串行模式的区别,短小命令也需... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU join 重复键实战:左边两行右边两行,为什么连接后得到四行 把用户清单和标签清单按第一列连接,输入各有两条同键记录,输出却多了一倍。若把join理解成“找到一个对应项就接上”,就会误以为工具重复了数据。实际上,同一连接键下的每一对输入行都能生成结果;重复键决定了连接的基数,而... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU comm 清单对账:两个文件都有apple,为什么仍要先统一排序规则 比较两份导出的对象清单,常见需求是找出仅在左边、仅在右边以及两边都有的名称。comm能直接生成这三类结果,但它依赖输入有序;把未经整理的两份文件直接交进去,可能得到错误诊断,也可能留下不该继续使用的部分输出。一次可靠... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU sed 范围提取:起始行已经含有结束标记,为什么还会继续读下去 从日志中提取BEGIN到END的片段时,常见写法是两个正则地址加打印命令。普通多行区块能正常工作,但如果一个空区块把BEGIN和END写在同一行,输出可能连带后面的正文。这个边界来自范围状态如何开启和结束,而不是正则... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU sort 数值排序实测:2e2 为什么排在30前面,改用-g又有哪些代价 把监控导出的数值交给sort -n,普通整数都排对了,一条2e2却出现在30前面。若它表示二百,这个结果明显不符合业务预期。命令没有失去排序能力,而是输入超出了所选数字语法。排序选项既规定比较方式,也规定什么字符串会... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
GNU grep 的三种退出状态:没有匹配,为什么不该和搜索出错走同一条分支 巡检脚本查找一条告警记录,grep返回非零,后面的逻辑马上报告“没有告警”。这条推理缺了一步:搜索本身可能没有完成,例如正则语法错误或文件无法读取。把这两种情况合并,可能让一次失败的检查被误认为健康结果。解决方法从保... yunqueblog/ 技术教程/ 2026-10-03/ 2 阅读
Bash local -I 的属性继承:同名变量保住了值,整数运算规则为什么还要另外继承 把外层整数变量复制进函数,打印的初值同样是7,不代表两个变量保留了相同属性。Bash变量既有值,也可能带整数、大小写转换等属性。local amount="$amount" 明确复制了值;在本文关闭自动继承选项的条件... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Bash 负数截取偏移:冒号后少一个空格,为什么拿到整段字符串 脚本想从编号末尾取三个字符,却拿回完整编号。表达式里的冒号和减号紧挨着,Bash 把它读成默认值展开,而没有进入字符串截取。给负数偏移留出空格,看起来只是排版变化,实际上是在选择另一种语法;因此这类问题不能只检查变量... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash 默认值展开:没有设置和空字符串,为什么会走不同分支 空值可能是调用者有意留下的脚本接受一个可选标签:没有传入时使用默认标签,明确传入空字符串时则不显示标签。写成 ${demo_value:-default} 后,主动留空也变回了默认值。问题来自冒号,它改变了检查条件,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读