¿Qué es grep?
La utilidad grep que veremos hoy es una herramienta de Unix que pertenece a la misma familia que las utilidades egrep y fgrep. Todas estas son herramientas de Unix diseñadas para realizar la tarea de búsqueda repetitiva en sus archivos y texto. Puede buscar archivos y su contenido para obtener información útil especificando criterios de búsqueda particulares a través del comando grep.
Entonces dicen que GREP significa Global Regular Expression Print, pero ¿de dónde se origina este comando 'grep'? grep básicamente se deriva de un comando específico para el muy simple y venerable editor de texto de Unix llamado ed. Así es como funciona el comando ed:
g/re/p
El propósito del comando es bastante similar a lo que queremos decir cuando buscamos a través de grep. Este comando obtiene todas las líneas de un archivo que coinciden con un determinado patrón de texto.
Exploremos un poco más el comando grep. En este artículo, explicaremos la instalación de la utilidad grep y presentaremos algunos ejemplos a través de los cuales puede aprender exactamente cómo y en qué escenario puede usarla.
Hemos ejecutado los comandos y procedimientos mencionados en este artículo en un sistema Ubuntu 18.04 LTS.
Instalar grep
Aunque la utilidad grep viene por defecto con la mayoría de los sistemas Linux, si no la tiene instalada en su sistema, este es el procedimiento:
Abra su terminal de Ubuntu ya sea a través del tablero o el atajo Ctrl+Alt+T. Luego ingrese el siguiente comando como root para instalar grep a través de apt-get:
$ sudo apt-get install grep
Ingrese y cuando se le solicite una opción y/n durante el procedimiento de instalación. Después de eso, la utilidad grep se instalará en su sistema.
Puede verificar la instalación verificando la versión de grep a través del siguiente comando:
$ grep --version
Uso del comando grep con ejemplos
El comando grep se puede explicar mejor presentando algunos escenarios en los que se puede utilizar. Estos son algunos ejemplos:
Buscar archivos
Si desea buscar un nombre de archivo que contenga una palabra clave específica, puede filtrar su lista de archivos a través del comando grep de la siguiente manera:
Sintaxis:
$ ls-l | grep -i “ palabra de búsqueda”
Ejemplos:
$ ls -l | grep -i sample
Este comando enumerará todos los archivos en el directorio actual con el nombre del archivo que contiene la palabra "privado".
Buscar una cadena en un archivo
Puede obtener una oración de un archivo que contiene una cadena de texto específica a través del comando grep.
Sintaxis:
nombre de archivo grep "cadena"
Ejemplo:
$ grep “sample file” sampleFile.txt
Mi archivo de muestra sampleFile.txt contiene la oración que tiene la cadena "archivo de muestra" que puede ver en el resultado anterior. La palabra clave y la cadena aparecen en forma de color en los resultados de búsqueda.
Buscar una cadena en más de un archivo
En caso de que desee buscar oraciones que contengan su cadena de texto de todos los archivos del mismo tipo, el comando grep está a su servicio.
Sintaxis 1:
$ grep “cadena” nombre de archivoPalabra clave*
Sintaxis 2:
$ grep “cadena” *.extensión
Ejemplo 1:
$ grep "sample file” sample*
Este comando obtendrá todas las oraciones que contengan la cadena "archivo de muestra" de todos los archivos con el nombre de archivo que contenga la palabra clave "muestra".
Ejemplo 2:
$ grep "sample file” *.txt
Este comando obtendrá todas las oraciones que contengan la cadena "archivo de muestra" de todos los archivos con extensión .txt.
Buscar una cadena en un archivo sin tener en cuenta el caso de la cadena
En los ejemplos anteriores, mi cadena de texto afortunadamente estaba en el mismo caso que la que se encuentra en mis archivos de texto de muestra. Si hubiera ingresado el siguiente comando, mi resultado de búsqueda sería nulo porque el texto en mi archivo no comienza con una palabra en mayúsculas "Muestra"
$ grep "Sample file" *.txt
Digamos a grep que ignore las mayúsculas y minúsculas de la cadena de búsqueda e imprima los resultados de búsqueda basados en la cadena a través de la opción -i.
Sintaxis:
$ grep -i "cadena" nombre de archivo
Ejemplo:
$ grep -i "Sample file" *.txt
Este comando obtendrá todas las oraciones que contengan la cadena "archivo de muestra" de todos los archivos con extensión .txt. Esto no tendrá en cuenta si la cadena de búsqueda estaba en mayúsculas o minúsculas.
Buscar sobre la base de una expresión regular
A través del comando grep, puede especificar una expresión regular con una palabra clave inicial y final. El resultado será la oración que contenga la expresión completa entre la palabra clave inicial y final especificada. Esta característica es muy poderosa ya que no necesita escribir una expresión completa en el comando de búsqueda.
Sintaxis:
$ grep “palabra clave inicial.*palabra clave final” nombre de archivo
Ejemplo:
$ grep "starting.*.ending" sampleFile.txt
Este comando imprimirá la oración que contiene la expresión (comenzando desde mi palabra clave inicial y terminando en mi palabra clave final) del archivo que especifiqué en el comando grep.
Mostrar un número específico de líneas después/antes de la cadena de búsqueda
Puede usar el comando grep para imprimir N número de líneas antes/después de una cadena de búsqueda de un archivo. El resultado de la búsqueda también incluye la línea de texto que contiene la cadena de búsqueda.
La sintaxis para N número de líneas después de la cadena clave:
$ grep -A
Ejemplo:
$ grep -A 3 -i "samplestring" sampleFile.txt
Así es como se ve mi archivo de texto de muestra:
Y así es como se ve la salida del comando:
Muestra 3 líneas, incluida la que contiene la cadena buscada, del archivo que especifiqué en el comando grep.
La sintaxis para N número de líneas antes de la cadena clave:
$ grep -B
También puede buscar N número de líneas "alrededor" de una cadena de texto. Eso significa N número de líneas antes y N después de la cadena de texto.
La sintaxis para el número N de líneas alrededor de la cadena clave:
$ grep -C
A través de los ejemplos simples descritos en este artículo, puede controlar el comando grep. Luego puede usarlo para buscar resultados filtrados que pueden incluir archivos o contenidos del archivo. Esto ahorra mucho tiempo que se desperdiciaba hojeando todos los resultados de búsqueda antes de dominar el comando grep.