包含string1的Grep行或包含string2的NOT

时间:2017-12-21 20:29:30

标签: linux grep

我需要将行从stdout重定向到文件,但只包含那些包含某些string1或不包含某些string2的行。我怎样才能做到这一点?我只知道如何单独进行(包含string1的行或不包含string2的行)。它不一定是grep,只是我可以在终端的管道中使用的东西。

3 个答案:

答案 0 :(得分:0)

Perl救援!

perl -ne 'print if /string1/ || ! /string2/' < file
  • -n逐行读取输入行
  • /string1/是正则表达式匹配
  • ||表示&#34;或&#34;,!表示&#34;不是&#34;

答案 1 :(得分:0)

您可以输入awk

 your_process | awk '$0!~/string2/ || $0~/string1/{print $0}'

如果正在处理的行不包含&#34; string2&#34;:$0!~/string2/
或者,如果正在处理的行确实包含&#34; string1&#34;:$0~/string1/
然后打印行:{print $0}

正如@Mischa在评论中分享的那样,你可以用awk非常简洁。这可以写成:

 your_process | awk '/string1/ || !/string2/' 

答案 2 :(得分:0)

您可以尝试这样的事情:

tail -f {SOMETHING} | grep string1 | grep -v string2 >> /tmp/out.log