sed 中的 `-n` 选项有什么作用?

sed 中的 `-n` 选项有什么作用?

这是的手册页条目-n

-n

禁止自动打印模式空间

我注意到当不是对于-n某些操作,每行都会打印到标准输出(并且请求的行会打印两次):

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

然而,这条定律并不适用于其他命令:

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

那么它-n到底起什么作用呢?

答案1

通常,sed 会处理每一行(进行替换等),然后打印结果。如果处理涉及打印行(例如 sed 的p命令),则打印两次(一次在处理期间,然后由自动后处理打印再次打印)。该-n选项禁用自动打印,这意味着您没有明确告诉它打印的行不会被打印,而您明确告诉它打印的行(例如使用p)只会打印一次。

  • sed -n '2,3p' test.txt- 根据要求仅打印第 2 行至第 3 行

  • sed '2,3p' test.txt- 打印每一行(自动),并且第二次打印第 2-3 行

  • sed -n 's/t/T/' test.txt- 在每一行上将“t”替换为“T”,但由于-n

  • sed 's/t/T/' test.txt- 将每一行的“t”替换为“T”,并自动打印结果

让我再添加一些例子:

  • sed -n 's/t/T/p' test.txt- 将每一行中的“t”替换为“T”,仅打印发生替换的行(即不是“第二行”)

  • sed 's/t/T/p' test.txt- 在每一行上将“t”替换为“T”,打印替换发生的行,然后自动打印每一行(结果:“second”打印一次,其他打印两次)

  • sed '2,3p; 3p' test.txt- 打印第 1、4 和 5 行一次(自动打印);打印第 2 行两次(第一个p命令然后自动打印),打印第 3 行三次(每个p命令打印一次,然后自动再次打印)。

相关内容