sed中'-n选项'的功能是什么?

时间:2014-09-08 03:45:45

标签: sed option

有人能给我一个例子来展示-n选项的用法吗?文件解释的方式对我来说太模糊了。感谢

2 个答案:

答案 0 :(得分:1)

即使不匹配也会打印该行。

鉴于以下几点:

$ printf '%s\n' {a..c}{0..1} 
a0
a1
b0
b1
c0
c1

-n仅打印带有' 1'的行。匹配:

$ printf '%s\n' {a..c}{0..1} | sed -n '/1/p;'
a1
b1
c1

如果没有-n,则会打印每一行,并使用' 1'由于p命令,第二次打印匹配:

$ printf '%s\n' {a..c}{0..1} | sed  '/1/p;'
a0
a1
a1
b0
b1
b1
c0
c1
c1

man sed轻松提供:

 -n      By default, each line of input is echoed to the standard output
         after all of the commands have been applied to it.  The -n option
         suppresses this behavior.

答案 1 :(得分:0)

当您使用-n作为过滤器时,使用sed选项,主要是消除材料,因此您不希望默认打印输入行。如果没有-n,则在每个编辑周期结束时,默认情况下会打印图案空间中的“线”。例如:

sed -n -e '/something/ s/another-thing/dohicky/p' some-file

这会查找包含“something”的行,并有效地忽略所有其他行。在匹配'something'的行上,字符串'another-thing'被'dohicky'替换,结果行被打印出来。

稍微更现实的示例:将csh的用户外壳更改为tcsh

sed -n -e '/\bin\csh/ s%/bin/csh%/bin/tcsh%p' /etc/passwd

这只显示了要更改的行。然后,如果您认为它是正确的,您可以使用:

sed -i .bak -e '/\bin\csh/ s%/bin/csh%/bin/tcsh%' /etc/passwd

使更改永久化。仍然不是一个很好的例子(你需要锁定密码文件,以便在编辑时不被其他程序修改,等等),但它看起来更真实。