如何编写单个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
返回变为“未知命令”。'“
答案 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