grep命令:查找不跟随指定字符的字符。

15

我想要打印在文件中所有没有紧随字符e的字符b。我尝试使用负向先行断言,但它没有起作用。

 grep  'b(?!e)' filename
 grep '(?!e)b)' filename
 egrep  'b(?!e)' f3.txt
当我运行这些命令时,没有任何显示,也没有错误或其他提示。我还检查了其他人发布的类似文章,但无法运行它。

3
grep "b[^e]" filename.txt 可以吗?在Linux上用 '。如果使用 grep -E 来支持扩展正则表达式呢?建议翻译:你可以尝试使用grep "b[^e]" filename.txt来实现这个功能,或者在Linux上使用带有引号的命令。如果想要使用扩展正则表达式支持,可以尝试使用 grep -E 命令。 - TessellatingHeckler
从这个线程https://dev59.com/lWox5IYBdhLWcg3wcj94#9198987可以看出,在标准grep中不支持lookaround,但在GNU grep中,grep -P可能使用Perl兼容的正则表达式并支持它。 - TessellatingHeckler
2个回答

14

grep -E 'b([^e]|$)' filename

这个命令会匹配以'b'开头且后面紧跟一个非'e'字符的字符串,或者以'b'结尾的字符串。


2
如果您的grep支持带有-P的Perl正则表达式,则可以使用look-around功能:
$ grep -P 'b(?!e)' <<< 'be'     # Gets no output
$ grep -P 'b(?!e)' <<< 'bb'
bb
$ grep -P 'b(?!e)' <<< 'b'
b

grep -E(在此情况下)唯一的区别是您不必考虑行尾的情况(请参见pilcrow的答案)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接