grep- 使用正则表达式打印所有不包含模式的行(没有 -v)
grep- using regex to print all lines that do not contain a pattern (without -v)
如何使用正则表达式和 grep 打印所有不包含模式的行。我不能使用 -v
因为我想在一个更复杂的正则表达式中实现,-v
是不切实际的。
但是每当我尝试打印不包含模式的行时,我都没有得到预期的输出。
例如,如果我有这个文件:
blah blah blah
hello world
hello people
something
并且我想打印所有不包含hello
的行,输出应该是:
blah blah blah
something
我试过类似的方法,但它不起作用:
egrep '[^hello]' file
关于 SO 的所有答案都使用 -v
,我找不到使用正则表达式的答案
您不能在一个字符中使用“完整”的单词 class。您的正则表达式当前匹配任何字符,除了:h
、e
、l
、o
。您可以将 grep 与以下选项一起使用并实施 Negative Lookahead ...
grep -P '^(?!.*hello).*$' file
-P
选项将模式解释为 Perl regular expression.
Ideone Demo
我看到你要求正则表达式,但不能使用 -v
。其他程序怎么样 awk,sed
?
如果没有,你的系统是不是没有awk
、sed
等?
awk '!/hello/' file
sed '/hello/d' file
sed -n '/hello/!p' file
如何使用正则表达式和 grep 打印所有不包含模式的行。我不能使用 -v
因为我想在一个更复杂的正则表达式中实现,-v
是不切实际的。
但是每当我尝试打印不包含模式的行时,我都没有得到预期的输出。
例如,如果我有这个文件:
blah blah blah
hello world
hello people
something
并且我想打印所有不包含hello
的行,输出应该是:
blah blah blah
something
我试过类似的方法,但它不起作用:
egrep '[^hello]' file
关于 SO 的所有答案都使用 -v
,我找不到使用正则表达式的答案
您不能在一个字符中使用“完整”的单词 class。您的正则表达式当前匹配任何字符,除了:h
、e
、l
、o
。您可以将 grep 与以下选项一起使用并实施 Negative Lookahead ...
grep -P '^(?!.*hello).*$' file
-P
选项将模式解释为 Perl regular expression.
Ideone Demo
我看到你要求正则表达式,但不能使用 -v
。其他程序怎么样 awk,sed
?
如果没有,你的系统是不是没有awk
、sed
等?
awk '!/hello/' file
sed '/hello/d' file
sed -n '/hello/!p' file