如何用grep排除一个单词?

时间:2010-12-27 11:09:06

标签: regex string search grep

我需要类似的东西:

grep ^"unwanted_word"XXXXXXXX

9 个答案:

答案 0 :(得分:687)

您也可以使用grep的-v选项执行此操作:

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" file会过滤unwanted_wordgrep XXXXXXXX只会列出模式为XXXXXXXX的行的行。

修改

从您的评论中看起来您想要列出没有unwanted_word的所有行。在这种情况下,您只需要:

grep -v 'unwanted_word' file

答案 1 :(得分:75)

我将这个问题理解为“如何匹配一个单词但排除另一个单词”,其中一个解决方案是两个greps系列:第一个grep找到想要的“word1”,第二个grep除了“word2”:

grep "word1" | grep -v "word2"

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

希望这有帮助。

答案 2 :(得分:31)

如果grep支持使用-P选项的Perl正则表达式,则可以执行(如果使用bash;如果tcsh,则需要转义!):

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

演示:

$ cat file
foo1
foo2
foo3
foo4
bar
baz

现在让我们列出除foo

之外的所有foo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$ 

答案 3 :(得分:29)

正确的解决方案是使用grep -v "word" file及其等效的awk

awk '!/word/' file

但是,如果您碰巧遇到了更复杂的情况,例如XXX出现而YYY 出现,那么{{1}方便而不是管道几个awk s:

grep

你甚至可以说更复杂的事情。例如:我希望这些行包含awk '/XXX/ && !/YYY/' file # ^^^^^ ^^^^^^ # I want it | # I don't want it XXX,但不包含YYY

ZZZ

答案 4 :(得分:10)

使用grep -v反转匹配:

grep -v "unwanted word" file pattern

答案 5 :(得分:4)

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

grep -v ^unwanted_word

答案 6 :(得分:4)

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

e.g。

grep -v 'unwanted_pattern' file_name

这将输出文件file_name中的所有行,该行没有'unwanted_pa​​ttern'。

如果要在文件夹内的多个文件中搜索模式,可以使用递归搜索选项,如下所示

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

这里grep将尝试列出当前目录中所有文件中'wanted_pa​​ttern'的所有匹配项,并将其传递给第二个grep以过滤掉'unwanted_pa​​ttern'。 '|' - 管道将告诉shell将左程序的标准输出(grep -r'want_pattern'*)连接到右程序的标准输入(grep -v'wiscory_pattern')。

答案 7 :(得分:0)

我使用grep -vw "^/"排除了根(“ /”)安装点。

# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}'
/
/root/.m2
/root
/var

# cat /tmp/topfsfind.txt| head -4 |awk '{print $NF}' | grep -vw "^/"
/root/.m2
/root
/var

答案 8 :(得分:-4)

我有一堆文件的目录。我想找到所有不包含字符串的文件" speedup"所以我成功使用了以下命令:

grep -iL speedup *