例如,一个文件包含内容:
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.84
和10.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