正则表达式 grep/egrep 问题

标签 regex linux bash

根据在 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/

相关文章:

linux - 我的 Cron 没有运行

json - 如何使用 jq 将此字符串转换为 JSON?

python - 在 Python coverage.py API 中使用省略标志

linux - 不要用 sed 打印不匹配的文本

Python 正则表达式 : match only if pattern is repeated n number of times

javascript - Node.js 100% CPU - gettimeofday 调用

regex - bash:带正则表达式的字符串运算符

linux - shell 中的浮点舍入

python - 在 python 中循环一个正则表达式替换一个字符串——缺少一些明显的东西

javascript - JS 正则表达式 : select only links (a) with attr