我有以下文件:
#!example
#!toto
example
#example
;example
toto
example
我想删除包含字符串"example"
的行,但行以"#!"
开头。
所以结果文件应该是:
#!example
#!toto
toto
如何仅使用sed
命令执行此操作?
答案 0 :(得分:4)
这一行怎么样:
sed '/^#!/n;/example/d' file
使用示例文本进行测试:
kent$ cat file
#!example
#!toto
example
#example
;example
toto
example
kent$ sed '/^#!/n;/example/d' file
#!example
#!toto
toto
如果你愿意, awk 也可以这样做:
kent$ awk '/^#!/ || !/example/' file
#!example
#!toto
toto
修改强>
sed的:
starting with #!
,请停止处理,转到下一行(n
)#!
不匹配),请检查是否包含example
,如果是,d
删除(不在输出中打印)AWK
#!
或(||
)开头,不包含示例。性能:
我无法说出来。因为要求很简单。您可以构建一个巨大的文件,并使用time
自行比较。
答案 1 :(得分:2)
如果您只想保留以#!
$ sed '/#!/!d' foo.sh
#!example
#!toto
答案 2 :(得分:2)
这可能适合你(GNU sed):
sed '/#!/b;/example/d' file
这将打印包含#!
的所有行以及包含example
的所有其他行。