我怎样才能排除一个字与grep?

我需要像这样的东西:

grep ^"unwanted_word"XXXXXXXX 

你也可以使用grep的-v选项来做到这一点:

 grep -v "unwanted_word" file | grep XXXXXXXX 

grep -v "unwanted_word" file将过滤具有unwanted_word的行,并且grep XXXXXXXX将仅列出具有模式XXXXXXXX

编辑:

从你的评论看来,你想列出所有没有unwanted_word 。 在这种情况下,所有你需要的是:

 grep -v 'unwanted_word' file 

我把这个问题理解为“如何匹配一个词但排除另一个词”,对此,一个解决scheme是两个系列的grep:首先grepfind想要的“word1”,第二个grep不包括“word2”:

 grep "word1" | grep -v "word2" 

在我的情况下,我需要区分grep的“word”选项不会做的“plot”和“#plot”(“#”不是字母数字)。

希望这可以帮助。

如果你的grep支持-P选项的Perl正则expression式,你可以做(​​如果bash;如果tcsh你需要转义! ):

 grep -P '(?!.*unwanted_word)keyword' file 

演示:

 $ cat file foo1 foo2 foo3 foo4 bar baz 

现在让我们列出除foo3之外的所有foo

 $ grep -P '(?!.*foo3)foo' file foo1 foo2 foo4 $ 

正确的解决scheme是使用grep -v "word" file ,与其awk等效:

 awk '!/word/' file 

然而,如果你碰巧遇到了一个更复杂的情况,比如说XXX出现,并且YYY 出现,那么awk就会变得很方便,而不是pipe几个grep

 awk '/XXX/ && !/YYY/' file # ^^^^^ ^^^^^^ # I want it | # I don't want it 

你甚至可以说更复杂的东西。 例如:我想要那些包含XXXYYY ,但不包含ZZZ

 awk '(/XXX/ || /YYY/) && !/ZZZ/' file 

等等

使用grep -v反转匹配:

 grep -v "unwanted word" file pattern 

-v选项将显示与模式不匹配的所有行。

 grep -v ^unwanted_word 

grep提供'-v'或'–invert-match'选项来select不匹配的行。

例如

 grep -v 'unwanted_pattern' file_name 

这将输出文件file_name中没有“unwanted_pa​​ttern”的所有行。

如果要在文件夹内的多个文件中search模式,则可以使用recursionsearch选项,如下所示

 grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern' 

在这里,grep会尝试从当前目录中的所有文件中列出'wanted_pa​​ttern'的所有出现,并将其传递给第二个grep以过滤掉'unwanted_pa​​ttern'。 '|' – pipe会告诉shell将左程序(grep -r'wanted_pa​​ttern'*)的标准输出连接到正确程序的标准input(grep -v'unwanted_pa​​ttern')。

我有一堆文件的目录。 我想find所有不包含string“加速”的文件,所以我成功地使用了下面的命令:

 grep -iL speedup *