6

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

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

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

我也想在单个命令中执行此操作。

4

5 回答 5

10

另一种解决方案:

 awk '!/10.45.56.84|10.81.51.92/' file
于 2012-10-06T14:46:15.793 回答
6

你可以这样做:

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 运算符。

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

希望这会有所帮助=)

于 2012-10-06T14:31:21.897 回答
4

这可能对您有用(GNU sed):

sed -r '/10\.(45\.56\.84|81\.51\.92)/d' file
于 2012-10-06T17:10:12.867 回答
4
grep -Fv -f <(echo $'10.45.56.84\n10.81.51.92') filename
于 2012-10-06T18:54:10.017 回答
0

awk -F " " '{if($1 != "10.45.56.84") if($1 != "10.81.51.92" ) { print $0;}}' inputFile > OutputFile

解释: awk : awk 是一种用于操作数据和生成报告的脚本语言。

" " : 用于分隔符。如果数据由 | 分隔 然后需要提到像“|”

{if($1 != "10.45.56.84") if($1 != "10.81.51.92" ) { print $0;}}' : 模式(条件)并在 outputFile 中打印

于 2018-02-01T13:39:14.020 回答