2009-10-17 21 views
16

Probamosbúsqueda de una línea con un asterisco literal "*" en grep

$ echo "$STRING" | egrep "(\*)" 

y también

$ echo "$STRING" | egrep '(\*)' 

y otras innumerables variaciones. Solo quiero hacer coincidir una línea que contenga un asterisco literal en cualquier lugar de la línea.

+1

Normalmente sigo agregando barras hasta que obtengo lo que quiero. :) –

+2

Ambos ejemplos funcionan para mí (y también funcionan con los paréntesis eliminados). –

Respuesta

16

Prueba una clase de caracteres en lugar

echo "$STRING" | egrep '[*]' 
+0

En Windows con GnuWin32, puede usar 'grep [*] file.txt'. –

+0

... excepto si tiene un archivo llamado literalmente '*' en el directorio donde lo ejecuta. La lección (no particularmente de este ejemplo, pero en general) es citar siempre sus expresiones regulares, sin importar cuán triviales sean. – tripleee

1

Ésta es una forma para que coincida con un asterisco literal:

$ echo "*" | grep "[*]" 
* 
$ echo "*" | egrep "[*]" 
* 
$ echo "asfd" | egrep "[*]" 
$ echo "asfd" | grep "[*]" 
$ 

Envolviendo una expresión entre paréntesis, por lo general le permite capturar un único carácter especial facilidad; esto también funcionará para un corchete derecho o un guión, por ejemplo.

Tenga cuidado cuando este no se encuentra en una agrupación soporte:

$ echo "hi" | egrep "*" 
hi 
$ echo "hi" | grep "*" 
$ 
+1

Su ejemplo muestra por qué considero que este comportamiento de egrep es irritante. Si quieres hacer una búsqueda de cadenas literal con grep, simplemente ponlo entre comillas. ¿Por qué querría ** ** querer grep para todo? Unix llama a ese programa 'cat' ;-) Odio el egrep que te obliga a ponerle un paréntesis a los caracteres regex, incluso si están entre comillas dobles. Fin de despotricar. ¡Gracias! – DaveParillo

+2

@DaveParillo: ni grep ni egrep saben si el patrón que los pasó se citó o no, ya que las comillas son interpretadas por el intérprete de comandos antes de lanzar [e] grep. La diferencia se debe a la respuesta de grep y egrep cuando el patrón comienza con "*", que está técnicamente mal formado ("*" es un sufijo). Prueba 'grep '' *" 'y verás que coincide con todo. Si desea una búsqueda literal (no regex), use 'fgrep' en su lugar. –

5

Uso:

grep "*" file.txt 

o

cat file.txt | grep "*" 
+0

ya que puede hacer la primera, la segunda con gato no es necesaria. – ghostdog74

+0

Te escucho. Parece que a muchas personas les gusta utilizar cat para transmitir un archivo en todo tipo de programas, aunque suele ser redundante. Solo pensé en incluirlo para que el ejemplo parezca más familiar. – DaveParillo

+0

Ninguno de los que funcionan bajo GNUWin32 en Windows. – Itsme2003

1
echo "$STRING" | fgrep '*' 

fgrep se utiliza para que coincida con el especial caracteres.

Cuestiones relacionadas