regex - grep正则表达式 - ls grep




我怎样才能用grep排除一个单词? (6)

我需要这样的东西:

grep ^"unwanted_word"XXXXXXXX

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

例如

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'。 '|' - pipe将告诉shell将左程序的标准输出(grep -r'wanted_pa​​ttern'*)连接到正确程序的标准输入(grep -v'unwanted_pa​​ttern')。


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

grep -v ^unwanted_word

使用grep -v反转匹配:

grep -v "unwanted word" file pattern

如果你的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
$ 

我有一堆文件的目录。 我想找到所有不包含字符串“加速”的文件,所以我成功地使用了以下命令:

grep -iL speedup *

正确的解决方案是使用grep -v "word" file ,以及awk等价grep -v "word" file

awk '!/word/' file

但是,如果您碰巧遇到了一种更复杂的情况,比如说XXX出现,并且YYY 出现,那么awk会派上用场,而不是用几个grep来管道:

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

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

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

等等





grep