如何使用带有grep的正则表达式打印所有不包含模式的行。我不能使用-v
,因为我想在一个更复杂的版本中实现正则表达式,-v
是不切实际的。
但每当我尝试打印不包含图案的线条时,我都无法获得预期的输出。
例如,如果我有这个文件:
blah blah blah
hello world
hello people
something
我想要打印所有不包含hello
的行,输出应为:
blah blah blah
something
我试过这样的事情,但它没有工作:
egrep '[^hello]' file
关于SO使用-v
的所有答案,我找不到使用正则表达式的答案
答案 0 :(得分:5)
您不能在字符类中使用“整个”单词。您的正则表达式当前匹配除h
,e
,l
,o
之外的任何字符。您可以将grep与以下选项一起使用,并实现Negative Lookahead ...
grep -P '^(?!.*hello).*$' file
-P
选项将模式解释为Perl regular expression。答案 1 :(得分:1)
我看到你要求正则表达式,并且不能使用-v
。那些像awk,sed
这样的其他程序呢?
如果没有,您的系统是否没有awk
,sed
等?
awk '!/hello/' file
sed '/hello/d' file
sed -n '/hello/!p' file