删除文件中具有不同模式的行

删除文件中具有不同模式的行

我需要删除具有不同图案的线条,

例如

sed '/Paris/d' file.txt |  cat -s
sed '/London/d' file.txt |  cat -s
sed '/Rome/d' file.txt |  cat -s
sed '/Pais/d' file.txt |  cat -s

如何使用一系列城市名称并且只输入一次命令 sed 来完成此操作?

答案1

您可以sed通过以下方式使用:

sed '/paris\|london\|rome\|pais/Id' cities

表示I不匹配大小写d表示删除模式空间中所有匹配的行。

答案2

使用 awk:

awk '{if(match(tolower($0),/(paris|london|rome)/)==0) print $0}' file > file

tolower将整行转换为小写
match如果匹配则返回子字符串的起始位置 否则 0

awk 将仅打印不包含 Paris,London,Rome 的行并将其保存到同一文件中

相关内容