macOS 12.6下Sed命令N+l组合输出异常问题求助
macOS下sed多行命令
l行为差异的问题解析 你遇到的问题核心是macOS自带的是BSD版本sed,而你参考的手册大概率是GNU sed的文档,两者的l命令行为存在明显差异:
核心行为差异
- GNU sed的
l命令:默认会把模式空间里的换行符转义成\n,将整个内容作为一行输出,末尾加$标记行尾。 - BSD sed的
l命令:默认会按模式空间里的实际换行分割成多行输出,每行末尾单独加$,不会把换行符转义显示。
- GNU sed的
你的执行流程拆解(BSD sed环境下)
- 第一次循环:
N把2读入模式空间,此时内容是1\n2;l命令将其拆成两行输出1$和2$;D删除第一个换行前的1,模式空间剩下2。 - 后续循环重复这个逻辑:每次
N读入下一行数字,模式空间变成x\nx+1,l拆成两行输出x$和x+1$,D删除前半部分,直到最后处理5\n6,输出5$和6$。 - 最终就得到了你看到的重复数字输出。
- 第一次循环:
解决方法(让BSD sed输出符合预期)
给l命令加上参数0,强制它不换行并转义显示所有非打印字符:seq 6 | sed -n 'N;l 0;D'执行这个命令就能得到你预期的
1\n2$、2\n3$这类输出。
内容的提问来源于stack exchange,提问作者ranemirusG
相关产品推荐
相关产品推荐

