2

您如何编写一个 sed 命令来删除包含多个正则表达式中的任何一个的行?

例如,我希望 sed 从文档中删除“/./.::”、“::”、“::foo 和“^^bar”。

截至目前,当我跑步时

 sed -ir '/ "//.//. ::|:: _|::foo_|^^bar" /d' text.file 

响应是“未知命令'/'”。

正则表达式周围有或没有内部 "s 都是这种情况:

 sed -ir '/ //.//. ::|:: _|::foo_|^^bar /d' text.file 

另外,如果我在“/”之前删除了转义(/),例如:

 sed -ir '/ "/./. ::|:: _|::foo_|^^bar" /d' text.file 

返回变为“未知命令'。'”

4

2 回答 2

1

您应该使用转义符号:\
并且无需引用模式匹配或添加下划线,只需尝试:

sed -i -r '/\/.\/. ::|:: |::foo|\^\^bar/d' file.txt

此外,您可能需要考虑转义.符号。否则该点将匹配任何字符。

高温高压

于 2012-07-23T07:38:54.760 回答
0
sed '{
s/::foo_//
s/\^\^bar//
s!/./. ::!!
s/:: _//
}' input_file

要完全删除包含模式的行:

sed '{
/::foo_/d
/\^\^bar/d
\!/./. ::!d
/:: _/d
}' input_file
于 2012-07-23T05:16:45.927 回答