символ ESC используется в grep

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 не требуется.

Кто-либо может объяснить причину этого?

1
задан 21 November 2016 в 12:33

1 ответ

Стандартный 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 или ДО на основе общего количества обратных косых черт, которые я должен буду ввести...

3
ответ дан 7 December 2019 в 12:37

Другие вопросы по тегам:

Похожие вопросы: