基于对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时,它说它具有高度的实验性而且不使用它。
答案 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。