我试图了解sed的'n'命令是如何运作的。
我使用的是Mac OS X,因此它来自BSD
让我们考虑这个例子:
$ seq 5 | sed -e 'n;p'
1
2
2
3
4
4
5
根据Apple manpage here(参见下面的引文)和我的理解,输出应该是这样的:
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
关于sed的Apple手册页:
[2addr] n的
如果未抑制默认输出,则将模式空间写入标准输出, 并用下一行输入替换模式空间。
我期望sed如何管理这个:
第一个周期:
第二个周期:
等
我还在(GNU?)sed上找到了this教程,但是我没有帮助我理解这个命令行是如何工作的('*'在“修改为输出流”中意味着什么专栏?)
有人可以一步一步向我解释一下是怎么回事吗?为什么有些数字只打印一次?默认输出是否替换为在stdout中写入模式空间的'n'第一个函数?模式空间是否真的被'n'修改过?
答案 0 :(得分:2)
感谢您参考我的sed教程,该教程是为最初的AT& T / Sun sed编写的。我会尽力使用各种扩展和变体来保持最新状态,例如: G。 GNU sed。
不要忘记,'n'命令将下一行读入模式空间,该模式空间“刷新”现有模式空间。 'N“命令不会”刷新“,但会附加模式空间。
以下是'n; p'命令
的情况Sed现在再次重复上述步骤。其中读入“3”,打印出来,然后读入“4”并打印两次,等等。
例如,如果您使用
seq 10 | sed -n -e 'n;p'
然后sed将打印每隔一行。也就是说,
这有帮助吗?
当我提到“修改输出”时,它取决于是否使用了'-n'命令行选项。请参见该图表的底部。
答案 1 :(得分:-1)
这可能对您有用:
比较
sed -ne 'n;p' file
为:
sed -e 'n;p' file