2012-03-21 21 views
6

Aquí está el texto del archivo que estoy trabajando con:Mi expresión regular no está funcionando en grep

(4 spaces)Hi, everyone 

(1 tab)yes 

Cuando ejecuto este comando - grep '^[[:space:]]+' myfile - no se imprime nada a la salida estándar.

¿Por qué no coincide con el espacio en blanco en el archivo?

Estoy usando GNU grep versión 2.9.

Respuesta

6

Existen varias sintaxis de expresiones regulares diferentes. El valor predeterminado para grep se llama sintaxis básica en la documentación de grep.

De hombre grep (1):

In basic regular expressions the meta-characters 
?, +, {, |, (, and) lose their special meaning; instead 
use the backslashed versions \?, \+, \{, \|, \(, and \). 

Por lo tanto en lugar de + que debería haber tecleado \+:

grep '^[[:space:]]\+' FILE 

Si necesita más potencia de sus expresiones regulares, también me animo a echar un vistazo a la sintaxis de expresiones regulares de Perl. Generalmente son considerados los más expresivos. Hay una biblioteca C llamada PCRE que los emula y enlaces grep a ella. Para usarlos (en lugar de la sintaxis básica) puede usar grep -P.

2

Usted podría utilizar -E:

grep -E '^[[:space:]]+' FILE 

Esto permite la expresión regular extendida. Sin él, obtiene BRE (expresiones regulares básicas) que tienen una sintaxis más simplificada. Alternativamente, podría ejecutar egrep con el mismo resultado.

+0

Esto es engañoso. El interlocutor no está utilizando ninguna característica que requiera sintaxis extendida. Simplemente necesita hacer una barra invertida en el signo + según la sintaxis básica. –

+0

Eso es cierto, no se dio cuenta de que aceptaba clases de caracteres como tales en BRE. Actualizará. – FatalError

1

He encontrado lo que necesita para escapar de la +:

grep '^[[:space:]]\+' FILE 
+0

Estoy desconcertado acerca de esto y cómo funciona – dldnh

+0

@dldnh: ver mi respuesta –

+0

aha, gracias, @ user1131467! – dldnh

0

Trate grep -P '^\s+' lugar, siempre y cuando estés usando grep de GNU. Es mucho más fácil escribir y tiene mejores expresiones regulares.

Cuestiones relacionadas