在sed手册中找到有关命令D的以下内容,
D-如果模式空间不包含换行符,请像发出d命令一样开始正常的新循环。否则,将模式空间中的文本删除到第一行,然后在不读取新输入行的情况下,使用结果模式空间重新开始循环
但是我尝试的示例似乎与上面描述的不匹配。
$cat test
LINE 101
LINE 201
LINE 301
LINE 401
$ sed -nr '1{p;N;p;D;}' test
LINE 101
LINE 101
LINE 201
基于sed手册的描述,我的理解如下,
但是那不是我看到的输出。
我认为答案已经包含在@potong的评论中。
关于为什么OP对sed
的行为感到惊讶,我只能推测这是由于他的观点2的措辞造成的:
将LINE 201附加到图案空间,打印图案空间(LINE 101\ n LINE 201)
为以下错误解释留出空间:
N
picks输入的下一行并将其附加到当前行模式空间(中间有换行符);然后,当结束到达脚本,输入的下一行相同是read。
这意味着LINE 201
被处理两次。相反,它仅处理一次,因为输入[0]读取新行]并将其添加到模式空间的内容中。