How can I exclude one word with grep?
我需要这样的东西:
1 | grep ^"unwanted_word"XXXXXXXX |
您也可以使用grep的
1 | grep -v"unwanted_word" file | grep XXXXXXXX |
编辑:
从您的评论看起来您想要列出没有
1 | grep -v 'unwanted_word' file |
我将这个问题理解为"如何匹配一个单词但排除另一个单词",其中一个解决方案是两个greps系列:第一个grep找到想要的"word1",第二个grep排除"word2":
1 | grep"word1" | grep -v"word2" |
在我的情况下:我需要区分grep的"word"选项不会做的"plot"和"#plot"("#"不是字母数字)。
希望这可以帮助。
如果
1 | grep -P '(?!.*unwanted_word)keyword' file |
演示:
1 2 3 4 5 6 7 | $ cat file foo1 foo2 foo3 foo4 bar baz |
现在让我们列出除
1 2 3 4 5 | $ grep -P '(?!.*foo3)foo' file foo1 foo2 foo4 $ |
正确的解决方案是使用
1 | awk '!/word/' file |
但是,如果碰巧有一个更复杂的情况,例如,
1 2 3 4 | awk '/XXX/ && !/YYY/' file # ^^^^^ ^^^^^^ # I want it | # I don't want it |
你甚至可以说一些更复杂的东西。例如:我希望这些行包含
1 | awk '(/XXX/ || /YYY/) && !/ZZZ/' file |
等等
使用grep -v反转匹配:
1 | grep -v"unwanted word" file pattern |
grep提供'-v'或'--invert-match'选项来选择不匹配的行。
例如
1 | grep -v 'unwanted_pattern' file_name |
这将输出文件file_name中的所有行,该行没有'unwanted_pa??ttern'。
如果要在文件夹内的多个文件中搜索模式,可以使用递归搜索选项,如下所示
1 | grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern' |
这里grep将尝试列出当前目录中所有文件中'wanted_pa??ttern'的所有匹配项,并将其传递给第二个grep以过滤掉'unwanted_pa??ttern'。
'|' - pipe将告诉shell将左程序的标准输出(grep -r'want_pattern'*)连接到正确程序的标准输入(grep -v'wiscory_pattern')。
1 | grep -v ^unwanted_word |
我有一堆文件的目录。我想找到所有不包含字符串"speedup"的文件,所以我成功使用了以下命令:
1 | grep -iL speedup * |