在文件中search多个模式,如果模式匹配则删除行

例如,一个文件包含内容:

10.45.56.84 raj 10.49.31.81 mum 10.49.31.86 mum 10.81.51.92 guj 10.45.56.116 raj 10.45.56.84 raj 

我想在上面的文件中search10.45.56.8410.81.51.92 ,如果模式匹配,则删除行。

我也想在单一命令中做到这一点。

另一个方案

  awk '!/10.45.56.84|10.81.51.92/' file 
 grep -Fv -f <(echo $'10.45.56.84\n10.81.51.92') filename 

你可以这样做:

 sed -e '/10[.]45[.]56[.]84/d;/10[.]81[.]51[.]92/d' file 

这有两个用分号分隔的sed“d”删除命令。 但是,只有匹配每个命令之前的斜杠之间的相应模式才能执行它们。

你也可以使用grep:

 grep -Ev '10[.]45[.]56[.]84|10[.]81[.]51[.]92' file 

“-v”标志告诉grep只打印与模式不匹配的行,我们使用OR运算符“|” 以匹配任一模式。 使用“-E”标志,所以我们不必用反斜杠来转义OR运算符。

在这两种情况下,我们在括号之间放置句号,否则句号被用作匹配任何字符的运算符。 您可以在一对括号内放置更多的字符,并将它们解释为匹配指定的一个字符。

希望这有助于=)

这可能适用于你(GNU sed):

 sed -r '/10\.(45\.56\.84|81\.51\.92)/d' file