有人能给我一个例子来展示-n选项的用法吗?文件解释的方式对我来说太模糊了。感谢
答案 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
使更改永久化。仍然不是一个很好的例子(你需要锁定密码文件,以便在编辑时不被其他程序修改,等等),但它看起来更真实。