在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手册说明,我理解的方式如下,
但这不是我看到的输出。
答案 0 :(得分:0)
我认为答案已经包含在@potong的评论中。
关于OP为什么sed
的行为感到惊讶,我只能推测这是由于他的观点2的措辞造成的:
将LINE 201附加到图案空间以打印图案空间(LINE 101 \ n LINE 201)
为以下错误解释留出空间:
N
插入输入的下一行并将其附加到当前行 模式空间(中间有换行符);然后,当结束 到达脚本,下一行输入相同的是 read 。
这意味着LINE 201
被处理了两次。相反,它仅处理一次,因为N
读取输入的新行并将其附加到模式空间的内容。