根据在 stackoverflow 上的搜索,我发现了 grep/egrep 之间的区别,但我仍然无法确定为什么这不起作用。我什至在 https://regex101.com/ 上查看过它它显示它已正确 checkout 。
正则表达式:
.*ping[\/] or ping\D
搜索 (text.txt):
path=/bin/ping6
path=/bin/ping
我试图跳过第一个,只找到第二个。
如果我执行 grep ping text.txt,它会发现两者都不是我想要的。
grep -e ".*ping[\/]" text.txt [doesn't work]
egrep ".*ping[\/]" text.txt [doesn't work]
grep -P ".*ping[\/]" text.txt [doesn't work]
我确实让它起作用了,但不确定为什么:
grep -P "ping\D" text.txt [worked]
grep -e "ping\D" text.txt [doesn't work]
我对 grep -e/egrep/grep -p/regex 有什么不理解的?
当我 man grep -P 它说它是高度实验性的,不要使用它。
最佳答案
\D
是扩展正则表达式的字母“D”。对于 perl 正则表达式,\D
是一个非数字,而 \d
是一个数字。
要搜索“ping”后跟可选的数字后跟斜杠,您需要:
grep 'ping[[:digit:]]\?/'
grep -E 'ping[[:digit:]]?/'
要搜索“ping”不后跟数字:
grep -E 'ping($|[^[:digit:]])' # ping then end-of-line or non-digit
grep -P 'ping(?!\d)'
GNU 扩展正则表达式 documented here .
关于正则表达式 grep/egrep 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989210/