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