例如,一个文件包含以下内容:
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.84
并10.81.51.92
删除行。
我也想在单个命令中执行此操作。
另一种解决方案:
awk '!/10.45.56.84|10.81.51.92/' file
你可以这样做:
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
grep -Fv -f <(echo $'10.45.56.84\n10.81.51.92') filename
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 中打印