Muito do que consideramos "expressões regulares" é na verdade chamado Expressões regulares estendidas (ou EREs) no POSIX. Mas sua grep
chamada parece estar no modo Expressão regular básica (ou BRE, para abreviar). BREs e EREs têm várias diferenças. Uma dessas diferenças é que você precisa escapar dos metacaracteres: +
é um sinal de mais literal, a menos que você escape com uma barra invertida. Seu grep
comando parece estar no modo BRE, então tente usar em \+
vez de uma planície +
.
Se você está sendo realmente rigoroso sobre BRE versus ERE, os BREs não suportam as operações +
e ?
, embora você possa simulá-los com \{1,\}
e \{0,1\}
construções, respectivamente. BREs estritos também não suportam o |
operador e não sei como você simula isso em um BRE. No entanto, diferentemente dos EREs, os BREs suportam referências anteriores (que se parecem muito com o Perl, exceto que você precisa escapar dos parênteses).
Algumas grep
implementações (como o GNU) apoiar os ?
, +
e |
operadores em modo BRE, embora você tem que escapar deles como quaisquer outros metacaracteres: \?
, \+
, e \|
. Mas não há grep
implementações que eu conheço que suportem referência traseira no modo ERE.
Para forçar o grep
uso do modo ERE, você pode usar a -E
opção grep
ou, em egrep
vez disso, chamá-lo .
+
quantificador deve ser escrito como\+
em BRE. Então,grep 'a.\+b'
ougrep -E 'a.+b'
.