我须要这样的东西: 正则表达式
grep ^"unwanted_word"XXXXXXXX
我将这个问题理解为“如何匹配一个单词但排除另外一个单词”,其中一个解决方案是两个greps系列:第一个grep找到想要的“word1”,第二个grep排除“word2”: shell
grep "word1" | grep -v "word2"
在个人状况下:我须要区分grep的“word”选项不会作的“plot”和“#plot”(“#”不是字母数字)。 bash
但愿这能够帮助。 spa
grep提供'-v'或'--invert-match'选项来选择不匹配的行。 code
例如 递归
grep -v 'unwanted_pattern' file_name
这将输出文件file_name中的全部行,该行没有'unwanted_pattern'。 ip
若是要在文件夹内的多个文件中搜索模式,可使用递归搜索选项,以下所示 字符串
grep -r 'wanted_pattern' * | grep -v 'unwanted_pattern'
这里grep将尝试列出当前目录中全部文件中'wanted_pattern'的全部匹配项,并将其传递给第二个grep以过滤掉'unwanted_pattern'。 '|' - pipe将告诉shell将左程序的标准输出(grep -r'want_pattern'*)链接到正确程序的标准输入(grep -v'wiscory_pattern')。 it
正确的解决方案是使用grep -v "word" file
,其awk
等效: pip
awk '!/word/' file
可是,若是你碰巧遇到了一个更复杂的状况,好比说XXX
出现而YYY
没有出现,那么awk
会派上用场而不是管道好几个grep
:
awk '/XXX/ && !/YYY/' file # ^^^^^ ^^^^^^ # I want it | # I don't want it
你甚至能够说一些更复杂的东西。 例如:我想要那些包含XXX
或YYY
但不包含ZZZ
:
awk '(/XXX/ || /YYY/) && !/ZZZ/' file
等等
我有一堆文件的目录。 我想找到全部不包含字符串“speedup”的文件,因此我成功使用了如下命令:
grep -iL speedup *
若是你的grep
支持使用-P
选项的Perl正则表达式,你能够这样作(若是是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 $