Основываясь на результатах поиска в stackoverflow, я обнаружил разницу между grep/egrep, но я все еще не могу определить, почему это не работает. Я даже проверю его на https://regex101.com/, и он показывает, что он проверен правильно.Проблемы с regex grep/egrep
Regex:
.*ping[\/] or ping\D
поиск против (text.txt):
path=/bin/ping6
path=/bin/ping
Я пытаюсь пропустить первый и только найти 2-ой.
Если бы я сделал 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/задать расширенное/Grep -p/регулярное выражение?
Когда я мужчина grep -P, он сказал, что он очень экспериментальный, и не использовать его.
Хорошо, что объясняет, почему это работает для grep -P, а не grep -e. Я на самом деле не хочу 6, поэтому мне нужно только слово ping, но сначала ping 6, и он соответствует. – roadzy
Это не 'grep -E 'ping ($ | [^ [: digit:]])'' то же самое, что 'grep -E 'ping [^ [: digit:]]''? Так как '' 'anchor - это не цифра? – ShellFish
, если строка '/ bin/ping', то шаблон' 'ping [^ [: digit:]]' '** не будет соответствовать **, потому что после« ping »и« [^ [: digit:]] 'должен совпадать с одним символом. Якорь '$' соответствует пустой строке после «ping». –