搜索文件中的多个模式,如果模式匹配则删除行

Pri*_*arg 4 unix shell scripting awk sed

例如,文件包含内容:

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
Run Code Online (Sandbox Code Playgroud)

我想搜索10.45.56.8410.81.51.92在上面的文件中删除线条,如果模式匹配.

我也想在单一命令中这样做.

Ted*_*345 7

另一种方案:

 awk '!/10.45.56.84|10.81.51.92/' file
Run Code Online (Sandbox Code Playgroud)

  • 这也将删除该行:`10145x56y84`.对于给定的输入可能是可以接受的,但是`awk'!/ 10\.45\.56\.84 | 10\.81\.51\.92 /'`会更准确. (2认同)

Jan*_*lho 6

你可以这样做:

sed -e '/10[.]45[.]56[.]84/d;/10[.]81[.]51[.]92/d' file
Run Code Online (Sandbox Code Playgroud)

它有两个用分号分隔的 sed "d" 删除命令。但是,仅当它们与每个命令之前的斜杠之间包含的相应模式匹配时才会执行它们。

您还可以使用 grep:

grep -Ev '10[.]45[.]56[.]84|10[.]81[.]51[.]92' file
Run Code Online (Sandbox Code Playgroud)

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

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

希望这有帮助 =)