用sed去除褶皱线

时间:2012-07-23 05:00:48

标签: regex sed

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

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

截至目前,当我跑

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

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

在有或没有正则表达式内部的情况下是这种情况:

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

此外,如果我删除'/'之前的转义符(/),例如:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

HTH

答案 1 :(得分:0)

sed '{
s/::foo_//
s/\^\^bar//
s!/./. ::!!
s/:: _//
}' input_file

完全删除包含模式的行:

sed '{
/::foo_/d
/\^\^bar/d
\!/./. ::!d
/:: _/d
}' input_file