Para buscar una determinada cadena de caracteres en un archivo, use el comando grep. La sintaxis básica del comando grep es:
$ grep cadena_de_caracteres archivo |
donde cadena_de_caracteres es la palabra o frase que quiere encontrar, y archivo es el archivo que quiere buscar.
Una cadena de caracteres está formada por uno o más caracteres, una única letra, una palabra o una frase. Las cadenas de caracteres pueden incluir "espacios en blanco", signos de puntuación, y caracteres invisibles (de control).
Por ejemplo, para buscar el teléfono de Edgar Allan Poe, escriba grep seguido de parte o de la totalidad de su nombre y del archivo que contenga la información:
$ grep Poe extensions Edgar Allan Poe x72836 $ |
Observe que puede haber más de una línea que cumpla con los patrones especificados:
$ grep Allan extensions David Allan x76438 Edgar Allan Poe x72836 $ grep Al extensions Louisa May Alcott x74236 David Allan x76438 Edgar Allan Poe x72836 $ |
grep distingue entre mayúsculas y minúsculas; es decir, debe especificar si las entradas van en mayúsculas o minúsculas:
$ grep allan extensions $ grep Allan extensions David Allan x76438 Edgar Allan Poe x72836 $ |
Observe que grep no funcionó en el primer intento porque ninguna de las entradas comenzaba por minúscula.
grep se utiliza muy a menudo como "filtro" con otros comandos. Esto le permite filtrar y eliminar la información inútil que se produce tras ejecutar un comando. Para usar grep como filtro, debe enviar el resultado del comando mediante grep por el canal de comunicación. El símbolo para el canal de comunicación es "|".
El siguiente ejemplo muestra archivos que acaban por ".ps" creados en el mes de mayo:
$ ls -l *.ps | grep May |
La primera parte de esta línea de comando,
ls -l *.ps |
muestra una lista de archivos:
La segunda parte,
| grep May |
envía la lista por medio de grep, buscando el patrón mayo.:
$ ls -l *.ps | grep May -rw-r--r-- 1 elvis 2356 May 22 12:56 clock.ps -rw-r--r-- 1 elvis 5644 May 22 15:07 buttons.ps $ |
Para buscar un patrón que tenga más de una palabra, escriba la cadena entre comillas dobles o sencillas:
$ grep "Louisa May" extensions Louisa May Alcott x74236 $ |
grep puede buscar una cadena de caracteres en un grupo de archivos. Cuando encuentre un patrón que cumple con las pautas en más de un archivo, imprime el nombre del archivo, seguido de una coma y de la línea que concuerda con el patrón:
$ grep es * actores:Charlton Heston alaska:Alaska es el estado más extenso de los Estados Unidos. wilde:libro. Los libros están bien o mal escritos. $ |
Para buscar todas las líneas que no contengan una determinada cadena de caracteres, use la opción -v para grep. El siguiente ejemplo explica cómo buscar todas las líneas de los archivos del directorio personal medici que no contengan la letra e:
$ ls actores alaska interior tutores wilde $ grep -v e * actores:Lun Mar 14 10:00 PST 1936 wilde:Eso es todo. $ |
También puede usar el comando grep para buscar destinos definidos como patrón usando expresiones regulares. Las expresiones regulares están formadas por letras y números, así como por caracteres que tienen un significado especial para grep. Dichos caracteres especiales, llamados metacaracteres, también tienen un significado especial para el sistema y tienen que ir entre comillas o entre paréntesis precedidos por una barra inversa. Siempre que use una expresión regular de grep tras el indicador de comando, escríbala entre comillas, o precedida de metacaracteres de escape (como & ! . * $ ? y \) con una barra inversa (\).
$ grep '^b' list |
busca cualquier línea del archivo list que empiece por "b."
$ grep 'b$' list |
muestra cualquier línea en la que "b" sea su último carácter. Y el comando:
$ grep '^b$' list |
muestra cualquier línea de list en la que "b" es el único carácter de la línea.
$ grep 'an.' list |
busca cualquier cadena de tres caracteres que contenga "an" como sus dos primeros, incluyendo "antes" "planta", "finanzas" y "plan" (ya que los espacios también se tienen en cuenta).
Cuando un asterisco (*) va detrás de un carácter, grep lo interpreta como "cero o más apariciones de dicho carácter". Cuando el asterisco va detrás de una expresión regular, grep lo interpreta como "cero o más apariciones de caracteres que concuerden con el patrón."
Como incluye cero apariciones, el uso del asterisco no es nada intuitivo. Suponga que desea encontrar todas las letras que contengan una "qu". Si escribe:
$ grep 'qu*' list |
funcionará según lo esperaba. Sin embargo, si quiere buscar todas las palabras que contengan la letra "n", deberá escribir:
$ grep 'nn*' list |
Si quiere buscar todas las palabras que contengan el modelo "nn", deberá introducir:
$ grep 'nnn*' list |
Puede intentar ver lo que ocurre al contrario.
Para concordar cero o más apariciones de cualquier carácter de list, escriba:
$ grep .* list |
Suponga que quiera buscar las líneas de un texto que tenga el símbolo ($). Si precede el signo de dólar de la expresión regular con una barra invertida (\), indicará a grep que ignore (escape) su significado especial. Esto es válido también para los demás metacaracteres (& ! . * ? y el propio \).
Por ejemplo, la expresión
$ grep ^\. |
concuerda líneas que empiecen con un punto, y resulta especialmente útil cuando busque peticiones de formateo de nroff o troff (que empiecen con un punto).
La siguiente tabla, Tabla 4-1, proporciona una lista de los patrones de búsqueda de modelos que más frecuentemente puede usar con grep..
Tabla 4-1 Elementos del modelo de búsqueda de grep
Carácter |
Concuerda |
---|---|
El comienzo de una línea de texto |
|
El final de una línea de texto |
|
Cualquier carácter único |
|
[...] |
Cualquier carácter único de la lista o rango entre paréntesis |
[^...] |
Cualquier carácter que no esté en la lista o el rango |
Cero o más apariciones del carácter precedente o de la expresión regular |
|
.* |
Cero o más apariciones de cualquier carácter único |
Ignora el significado especial del próximo carácter |
Observe que estos caracteres de búsqueda también se pueden usar en las búsquedas del editor de textos vi.
Como se explicó anteriormente, las comillas se utilizan para delimitar el texto que desee que sea interpretado como una palabra. Por ejemplo, para que grep busque todos los archivos que contengan la frase "a la carga, mis valientes", deberá introducir lo siguiente:
$ grep "a la carga, mis valientes" * |
Las comillas simples (') también se pueden usar para agrupar frases con palabras múltiples formando unidades únicas, o para asegurarse de que determinados caracteres como por ejemplo $ sean interpretados literalmente (el metacarácter historia ! se interpreta siempre como tal, incluso si está entre comillas, salvo que lo haga preceder por una barra inversa). En cualquier caso, es una buena idea escribir caracteres como & ! $ ? . ; y \ precedidos de una barra inversa, si quiere que se interpreten como caracteres tipográficos normales.
Si escribe por ejemplo:
$ grep $ list |
verá todas las líneas de list. Sin embargo, si introduce:
$ grep '\$' list |
sólo verá las líneas que contengan el caracter "$"..
Si desea más información acerca del comando grep(1), consulte man Pages(1): User Commands.