例如,文件包含内容:
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
,如果模式匹配,则删除行。
我也希望在单一命令中执行此操作。
答案 0 :(得分:6)
另一种解决方案:
awk '!/10.45.56.84|10.81.51.92/' file
答案 1 :(得分:4)
grep -Fv -f <(echo $'10.45.56.84\n10.81.51.92') filename
答案 2 :(得分:3)
你可以这样做:
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运算符。
在这两种情况下,我们将句点放在括号之间,否则句点将用作匹配任何字符的运算符。您可以在一对括号中放置更多字符,它们将被解释为匹配指定的一个字符。
希望这有助于=)
答案 3 :(得分:2)
这可能适合你(GNU sed):
sed -r '/10\.(45\.56\.84|81\.51\.92)/d' file
答案 4 :(得分:-1)
awk -F&#34; &#34; &#39; {if($ 1!=&#34; 10.45.56.84&#34;)if($ 1!=&#34; 10.81.51.92&#34;){print $ 0;}}&#39; inputFile&gt; OUTPUTFILE
解释: awk:awk是一种脚本语言,用于处理数据和生成报告。
&#34; &#34; :它用于分隔符。如果数据由|分隔然后需要提及像&#34; |&#34;
{if($ 1!=&#34; 10.45.56.84&#34;)if($ 1!=&#34; 10.81.51.92&#34;){print $ 0;}}&#39; :pattern(条件)并在outputFile中打印