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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含string1的Grep行或包含string2的NOT相关的知识,希望对你有一定的参考价值。

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

答案

Perl救援!

perl -ne 'print if /string1/ || ! /string2/' < file
  • -n逐行读取输入
  • /string1/是一场正则表达式比赛
  • ||的意思是“或”,!的意思是“不是”
另一答案

你可以管道到awk

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

如果正在处理的行不包含“string2”:$0!~/string2/ 或者,如果正在处理的行包含“string1”:$0~/string1/ 然后打印行:{print $0}

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

 your_process | awk '/string1/ || !/string2/' 
另一答案

你可以尝试这样的事情:

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

以上是关于包含string1的Grep行或包含string2的NOT的主要内容,如果未能解决你的问题,请参考以下文章

如何将 grep 生成的每个文件放入 zip 文件中

搜索过滤grep(win下为findstr)

shell --- grep 命令详解

列出包含“n”行或更少行的文件

linux利用grep查看打印匹配的下几行或前后几行的命令

grep:查找包含单词`star`但不包含单词`start`的所有文件