sh-4.3$ grep "hi +hello"
sh-4.3$ grep "hi +hello" test
sh-4.3$ grep "hi \+hello" test
hi hello
hi hello
sh-4.3$ grep "hi *hello" test
hi hello
hihello
hi hello
sh-4.3$
В вышеупомянутом коде символ ESC требуется с '+' regex символ, но в то время как использование '*' regex символьный символ ESC не требуется.
Кто-либо может объяснить причину этого?
Стандартный GNU grep
распознает, что BRE (основные регулярные выражения) и *
является исходным метасимволом в BRE, в то время как +
расширение BRE. Чтобы +
был распознан как метасимвол в BRE, его нужно оставить. Однако, если Вы говорите grep
использовать ДО (расширенные регулярные выражения) при помощи эти -E
флаг, Вы не должны выходить ни из какого метасимвола (при выходе из них они станут литералами вместо этого). существует немного объяснения в grep руководстве и , вот более подробный обзор
$ grep -E 'hi +hello' test
hi hello
hi hello
, который можно также использовать egrep
$ egrep 'hi +hello' test
hi hello
hi hello
, я решаю, использовать ли BRE или ДО на основе общего количества обратных косых черт, которые я должен буду ввести...