正则表达式grep / egrep问题

时间:2015-06-22 20:27:19

标签: regex linux bash

基于对stackoverflow的搜索,我发现了grep / egrep之间的区别,但我仍然无法确定为什么这不起作用。我甚至在https://regex101.com/检查了它,并显示它已正确检查。

正则表达式:

.*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无法理解的是什么?

当我说grep -P时,它说它具有高度的实验性而且不使用它。

1 个答案:

答案 0 :(得分:2)

\D是字母" D"用于扩展正则表达式。对于perl正则表达式,\d -digit,grep 'ping[[:digit:]]\?/' grep -E 'ping[[:digit:]]?/' 是数字。

搜索" ping"你可以选择跟随一个数字后跟一个斜线:

grep -E 'ping($|[^[:digit:]])'   # ping then end-of-line or non-digit
grep -P 'ping(?!\d)'

搜索" ping" 后跟数字:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

GNU扩展正则表达式documented here