C贸mo usar el comando grep en Linux con ejemplos
Seg煤n la propia definici贸n de la documentaci贸n que puedes encontrar el Linux, el comando grep permite buscar un patr贸n determinado en el fichero especificado como entrada. Por defecto, el comando imprime las l铆neas del fichero en las que encuentra una coincidencia con ese patr贸n indicado.
Adem谩s, este comando te ofrece algunas variantes interesantes como pueden ser egrep (similar a grep -E) o rgrep (similar a grep -r), que hist贸ricamente han sido utilizados en algunas aplicaciones del core de Linux. En este caso vamos a centrarnos en las opciones del propio comando grep.
Sabes que para probar todos estos comandos tienes el curso gratuito de Linux, donde te explico con detalle c贸mo instalar un Linux en tu ordenador o computadora. Tambi茅n acceder谩s a un descuentazo de la mejor gu铆a de comandos de Linux explicados y con ejemplos.
驴Quieres aprender a utilizar los scripts de shell como un profesional? Pues aqu铆 mismo tambi茅n puedes encontrar el curso de shell scripting avanzado.
Índice de contenidos
Cu谩ndo usar el comando grep en Linux
El comando grep es s煤per util cuando estamos buscando un texto o una palabra determinada en un fichero, ya que te permite realizar esta b煤squeda sin tener que abrir el fichero con un editor de texto. El patr贸n normalmente es considerado como una expresi贸n regular.. pero si lo que quieres buscar es una palabra o un texto, funciona perfectamente. La sintaxis b谩sica es muy sencilla:
grep [opciones] PATR脫N FICHERO
B煤squeda de patr贸n con comando grep en Linux
Como te comentaba, el comando grep permite buscar en un fichero, una cadena o patr贸n determinado. Pero lo que todav铆a no te he dicho es que con este pedazo de comando, puedes buscar tambi茅n un texto en la salida de un comando.
Por ejemplo, quieres obtener la l铆nea del usuario “jaime” en el fichero de configuraci贸n de usuarios de Linux para conocer toda la informaci贸n relacionada con este sujeto. Con la opci贸n “F” trata el texto que pones a continuaci贸n como una cadena de caracteres, y en caso de no ponerlo, lo trata como una expresi贸n regular.
jaime@aprendolinux:~$ grep jaime /etc/passwd
jaime:x:1000:1000:Jaime:/home/jaime:/bin/bash
jaime@aprendolinux:~$ grep -F 'jaime' /etc/passwd
jaime:x:1000:1000:Jaime:/home/jaime:/bin/bash
Tambi茅n te puede resultar 煤til buscar en la salida de un comando, como podr铆a ser el comando “ps” que ofrece los procesos que est谩n en ejecuci贸n en este momento. Imagina que quieres ver la informaci贸n de los procesos que contienen la cadena (o expresi贸n regular en este caso) “postfix”.
jaime@aprendolinux:~$ ps aux | grep postfix
root 2238 0.0 0.0 40100 3660 ? Ss oct03 0:04 /usr/lib/postfix/sbin/master -w
postfix 2649 0.0 0.0 40528 6012 ? S oct03 0:01 qmgr -l -t unix -u
postfix 173886 0.0 0.0 40336 5864 ? S 22:52 0:00 pickup -l -t unix -u -c
Ejemplos del comando grep con opciones
A continuaci贸n te voy a ense帽ar algunas de las opciones m谩s interesantes que ofrece el comando grep, y sobre todo las que vas a encontrar m谩s 煤tiles.
Comando grep no sensible a may煤sculas y min煤sculas
Imagina que est谩s buscando el nombre de una persona o una ciudad en un texto, pero no est谩s seguro si ese nombre puede estar escrito con alguna letra may煤scula o todo en min煤sculas. La opci贸n que debes utilizar para encontrar el patr贸n sin comprobar si est谩 con may煤sculas o min煤sculas ser铆a la opci贸n “-i”.
jaime@aprendolinux:~$ cat database
Nombre Telefono email
Juan Perez 666666666 juan.pe@micorreo
Pedro Lopez 555555555 pedro.lop@micorreo
alicia perez 444444444 alicia.pe@micorreo
jaime@aprendolinux:~/test1$ grep perez database
alicia perez 444444444 alicia.pe@micorreo
jaime@aprendolinux:~/test1$ grep -i perez database
Juan Perez 666666666 juan.pe@micorreo
alicia perez 444444444 alicia.pe@micorreo
Conocer el nombre del fichero donde grep encuentra coincidencia
Para conocer el nombre de los ficheros donde el comando grep ha encontrado el patr贸n indicado, debes usar las opci贸n “-H”. Si adem谩s usas la opci贸n “–color” el patr贸n se resalta mucho m谩s con un color llamativo.
jaime@aprendolinux:~/test1$ ls
database database2
jaime@aprendolinux:~/test1$ cat database2
Nombre Telefono email
Jesus Perez 666666666 jesus.pe@micorreo
alex perez 444444444 alex.pe@micorreo
jaime@aprendolinux:~/test1$ grep --color -H -i perez *
database:Juan Perez 666666666 juan.pe@micorreo
database:alicia perez 444444444 alicia.pe@micorreo
database2:Jesus Perez 666666666 jesus.pe@micorreo
database2:alex perez 444444444 alex.pe@micorreo
Usar el comando grep para encontrar l铆neas que no contengan patr贸n
Otra de las caracter铆sticas que te ofrece el comando grep es hacer una b煤squeda opuesta. Es decir, una b煤squeda de las l铆neas que no contengan una frase, texto o patr贸n. Para realizar esta b煤squeda opuesta deber谩s usar la opci贸n “-v”. Incluso se podr铆a unir a otras opciones del comando “grep” de esta forma:
jaime@aprendolinux:~/test1$ grep -v perez database
Nombre Telefono email
Juan Perez 666666666 juan.pe@micorreo
Pedro Lopez 555555555 pedro.lop@micorreo
jaime@aprendolinux:~/test1$ grep -v -i perez *
database:Nombre Telefono email
database:Pedro Lopez 555555555 pedro.lop@micorreo
database2:Nombre Telefono email
Saber la l铆nea donde se encuentra el patr贸n del comando grep
Si quieres saber el n煤mero de l铆nea donde puedes encontrar el patr贸n que est谩 buscando el comando grep, la opci贸n que necesitas es “-n”. Mira que chulada cuando juntamos varias opciones para sacar las coincidencias:
jaime@aprendolinux:~/test1$ grep --color -H -i -n perez *
database:2:Juan Perez 666666666 juan.pe@micorreo
database:4:alicia perez 444444444 alicia.pe@micorreo
database2:2:Jesus Perez 666666666 jesus.pe@micorreo
database2:3:alex perez 444444444 alex.pe@micorreo
Comando grep para b煤squeda recursiva
Otra opci贸n s煤per 煤til que nos ofrece el comando grep es la b煤squeda de un patr贸n en todo un arbol de directorios. De esta forma podremos encontrar una palabra o texto en un fichero que se encuentre en el mismo directorio en el que nos encontremos. Tambi茅n podemos buscar en cualquiera de los directorios que est谩n debajo de este. La opci贸n para realizar estas b煤squedas recursivas ser谩 “-r” con el nombre de un directorio justo detr谩s.
jaime@aprendolinux:~/test1$ ls -ld directory1 # Es un directorio
drwx------ 2 jaime adm 0 oct 21 16:08 directory1
jaime@aprendolinux:~/test1$ grep -r perez directory1
directory1/database:alicia perez 444444444 alicia.pe@micorreo
directory1/directory3/database:alicia perez 444444444 alicia.pe@micorreo