这是的手册页条目-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
命令打印一次,然后自动再次打印)。