单行next(n)命令

单行next(n)命令

Content #

单行next(n)命令会告诉sed编辑器移动到数据流中的下一行,不用再返回到命令列表的最开始位置。记住,通常sed编辑器在移动到数据流中的下一行之前,会在当前行中执行完所有定义好的命令,而单行next命令改变了这个流程。

在这个例子中,有一个包含5行文本的数据文件,其中有2行是空的。我们的目标是删除首行之后的空行,留下末行之前的空行。如果编写一个删除空行的sed脚本,那么结果是2个空行都会被删掉,这可不是我们想要的结果: $ cat data1.txt Header Line

Data Line #1

End of Data Lines $ $ sed ‘/^$/d’ data1.txt Header Line Data Line #1 End of Data Lines $ 由于要删除的行是空行,因此没有任何能够标示这种行的文本可供查找。解决办法是使用单行next命令。在这个例子中,先用脚本查找含有单词Header的那一行,找到之后,单行next命令会让sed编辑器移动到文本的下一行,也就是我们想删除的空行: $ sed ‘/Header/{n ; d}’ data1.txt Header Line Data Line #1

End of Data Lines $ 这时,sed编辑器会继续执行命令列表,即使用删除命令删除空行。sed编辑器在执行完命令脚本后会读取数据流中下一行文本,并从头开始执行脚本。因为sed 编辑器再也找不到包含单词Header的行了,所以也不会再有其他行被删除。

sed的n命令在执行时会依次做四件事,请问是哪四件?

  • print the current pattern space
  • clears the pattern space
  • reads the next line from the input-file into pattern space
  • resumes command execution where it left off

From #

Linux命令行与shell脚本编程大全