Cuándo usar \ en la cadena de búsqueda grep

Cuándo usar \ en la cadena de búsqueda grep

Tengo un contenido de archivo similar a:

A+B
C+D
A+B

Estas son cuerdas. Quiero buscar la aparición de A+B. Entonces escribo el comando como: grep 'A+B' test.txt. Sin embargo, ¿si escribo grep 'A\+B' test.txtno obtengo ningún resultado? Mientras que si en lugar de +la cadena contiene ., si agrego \o no agrego, obtengo los resultados de la búsqueda. No comprendo:

1) Cuándo debo agregar \y cuándo no.

2) ¿Por qué no obtuve ningún resultado cuando lo agregué +mientras obtuve resultados cuando lo agregué?.

Respuesta1

No especificaste qué sabor grepusas, pero es posible que uses GNU grep. Por defecto grepusa Basic Regular Expressions, y como se explica en man grep:

Expresiones regulares básicas versus extendidas

En expresiones regulares básicas, los metacaracteres ?, +, {, |, (,
y ) pierden su significado especial; en su lugar, utilice las
versiones con barra invertida \?, +, {, \|, ( y ).

Tenga en cuenta que si usara, -Ecambiaría a Extended Regular Expressions (ERE)y tendría que usar \+porque, de forma predeterminada, in EREy muchas otras sintaxis de expresiones regulares +significan one or more of the preceding character:

$ grep -E 'A\+B' test.txt
A+B
A+B

Entonces, para responder a tus preguntas:

  1. Debe utilizarlo \cuando desee buscar caracteres literales.

  2. En BREun solo punto significa any characterlo mismo que en ERE.

Respuesta2

En egrep(o grep -E) las expresiones regulares extendidas están habilitadas. Éstas incluyen:

+ - match one or more instances of the previous match pattern.

Estos se pueden usar en modo básico grepcon una barra invertida precedente, que no tiene su significado habitual de hacer literal, pero invoca la egrepfunción.

Entonces los siguientes son equivalentes: -

egrep 'A+B'
grep 'A\+B'

En ambos casos, la coincidencia es para uno o más As seguidos inmediatamente de B.

Debido a que egrephay un significado especial para '+', se debe utilizar un formato de escape para que coincida literalmente, por lo que lo siguiente también es equivalente:

egrep 'A\+B'
grep 'A+B'

Ambos coincidirán A+B, ya que en ambos casos se busca un '+' literal.

Otras egrepfunciones que se pueden usar al escapar grepincluyen \|cadenas de coincidencia alternativas y \{M,N\}, donde M y N son números que representan el mínimo y el máximo de repeticiones en un patrón de coincidencia. Estos no se escapan en egrep.

información relacionada