Comandos Grep Linux Unix
Comandos Grep Linux Unix
Comandos Grep Linux Unix
Para mostrar todas las líneas que contienen la cadena «tal» en una lista de archivos (donde
«*» representa todos los archivos en el directorio actual):
$ grep tal *
Para mostrar todas las líneas que no contengan la cadena «tal», se usa «-v»:
$ grep -v tal *
$ grep -l tal *
Para mostrar sólo el nombre de los archivos que no contienen la cadena, se usa «-L»:
$ grep -L tal *
Para buscar recursivamente, no sólo en los archivos del directorio actual sino también en
los de sus subdirectorios (donde "." representa el directorio actual), se usa «-r»:
$ grep -r tal .
La opción -r puede no estar disponible en todas las plataformas Unix. De ser así utilizar:
Para buscar todas las líneas que comienzan por «Ahora» y terminan con «siempre» seguido
de una cantidad arbitraria de espacio en blanco (nótese que el carácter ^ representa el inicio
de la línea, así como $ representa el final):
Para hacer que grep lea de la entrada estándar, no se especifica archivo alguno. Por
ejemplo, como ps -ef lista todos los procesos actualmente en ejecución, el siguiente
comando imprime todos los procesos que está ejecutando el usuario actual:
o
$ ps -efa | grep $USER
Mostrará las cuentas de usuarios que presenten actividad en ese momento.
---------------------------------------------------------------------------------------------
grep
Busca en la entrada, líneas que concuerden con el patrón dado. Cualquier meta-carácter con
un significado especial debe ser protegido precediéndolo con una barra inclinada inversa
(\ ). Algunos patrones de grep se encierran entre '..' (apóstrofos) para indicarle que no es un
metacarácter del sehll. También existe en su versión zgrep para buscar en archivos
comprimidos.
grep "ejemplo" * listara las lineas que concuerden con la cadena ejemplo de "todos" los
archivos del directorio actual.
grep -ri "hola" ./ busca en los archivos del directorio actual y los subdirectorios la palabra
hola.
grep -v hola pp.txt lista las líneas que no contengan la cadena hola del archivo pp.txt
grep -n hola pp.txt las líneas concordantes con la cadena hola del archivo pp.txt se
mostrarán acompañadas del número de línea.
grep -w sobre pp.txt listara solamente aquellas líneas que contienen concordancias que
forman palabras completas.
grep -A 2 hola pp.txt muestra 2 líneas de contexto después de las que concuerden con el
patrón hola.
grep -B 2 hola pp.txt muestra 2 líneas de contexto antes de las que concuerden con el patrón
hola.
grep -f patron.txt pp.txt obtiene el patrón de fichero patron.txt y listara líneas concordantes
del archivo pp.txt
grep -s "ejemplo" * suprime los mensajes de error sobre ficheros que no existen o no se
pueden leer.
grep [123] pp.txt listara las lineas que contengan los números 1, 2 o 3
grep '^L' pp.txt lista las lineas de pp.txt que comiencen la línea con el carácter L, el carácter
^ denota inicio de cadena.
grep 'h$' pp.txt lista las líneas de pp.txt que terminen en h, el carácter $ denota fin de
cadena.
grep '\<pe' pp.txt muestra todas las líneas de pp.txt que contengan palabras que comiencen
con la cadena pe.
grep '\>pe' pp.txt muestra todas las líneas de pp.txt que contengan palabras que finalicen
con la cadena pe.
grep '^[^#]' pp.txt muestra pp.txt, ocultando las líneas que empiezan por # y las líneas
vaciás.
grep -o patron archivo muestra solo la parte de la linea que coincide con el patrón.
Comando grep
El comando grep nos permite buscar, dentro de los archivos, las líneas que concuerdan con
un patrón. Bueno, si no especificamos ningún nombre de archivo, tomará la entrada
estándar, con lo que podemos encadenarlo con otros filtros.
Por defecto, grep imprime las líneas encontradas en la salida estándar. Es decir, que
podemos verlo directamente la pantalla, o redireccionar la salida estándar a un archivo.
Como tiene muchísimas opciones, vamos a ver tan sólo las más usadas:
-c En lugar de imprimir las líneas que coinciden, muestra el número de líneas que
coinciden.
-e PATRON nos permite especificar varios patrones de búsqueda o proteger aquellos
patrones de búsqueda que comienzan con el signo -.
-r busca recursivamente dentro de todos los subdirectorios del directorio actual.
-v nos muestra las líneas que no coinciden con el patrón buscado.
-i ignora la distinción entre mayúsculas y minúsculas.
-n Numera las líneas en la salida.
-E nos permite usar expresiones regulares. Equivalente a usar egrep.
-o le indica a grep que nos muestre sólo la parte de la línea que coincide con el patrón.
-f ARCHIVO extrae los patrones del archivo que especifiquemos. Los patrones del archivo
deben ir uno por línea.
-H nos imprime el nombre del archivo con cada coincidencia.
- Buscar todas las líneas que contengan palabras que comiencen por a en un archivo:
$ grep '\<a.*\>' archivo
- Enviar a un fichero las líneas del archivo /boot/grub/menu.lst que no son comentarios:
$ grep -v "#" /boot/grub/menu.lst
- Mostrar los ficheros que contienen la palabra TOLEDO en el directorio actual y todos sus
subdirectorios:
$ grep -r "TOLEDO" *
Como las direcciones MAC se representan en hexadecimal, los caracteres que buscamos son los números del
0 al 9 y las letras desde la A a la F.
-o Indica que la salida del comando debe contener sólo el texto que coincide con el patrón,
en lugar de toda la línea, como es lo habitual.
-i Lo he usado para que ignore la distinción entre mayúsculas y minúsculas.
-E Indica que vamos a usar una expresión regular extendida.
Hemos filtrado dicha información con el comando grep, obteniendo todas las direcciones IP
que aparecen:
grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}'
Por último, hemos filtrado la salida del comando anterior, para eliminar la dirección de broadcast junto con la
máscara de red para quedarnos sólo con la dirección IP de la máquina:
grep -v 255
La línea anterior no mostraría las líneas que no contengan el valor 255, es decir, las direcciones de broadcast y
máscara de red.
Al igual que en los otros dos ejemplos de expresiones regulares uso las opciones -oiE en el
comando grep:
-o Indica que la salida del comando debe contener sólo el texto que coincide con el patrón,
en lugar de toda la línea, como es lo habitual.
-i Lo he usado para que ignore la distinción entre mayúsculas y minúsculas.
-E Indica que vamos a usar una expresión regular extendida.
- See more at: http://enavas.blogspot.com.es/2008/04/el-shell-de-linux-comando-
grep.html#sthash.wmWh14KY.dpuf
EL COMANDO grep:
Supongamos que tenemos un archivo con una lista de nombres, digamos alumnos de una
clase, y queremos encontrar a todos aquellos que se apelliden Cervantes.
Una forma fácil de hacerlo es con el comando grep:
Mario Cervantes
Carmen Cervantes
grep desplegará las líneas que contienen Cervantes, incluso si es parte de una palabra más
grande, como Cervantesaavedra.
La forma general del comando grep es la siguiente:
Supongamos, por ejemplo, que no solamente tenemos un grupo de alumnos, sino 2, y los
nombres de los alumnos están escritos en Archivo.txt y Archivo.dat, entonces la línea
produce
Archivo.txt:Mario Cervantes
Archivo.txt:Carmen Cervantes
Archivo.dat:Josefina Cervantes
Archivo.dat:Jose Luis Cervantes
que indica los nombres que incluyen Cervantes y dicen además de qué archivo viene. O,
usando el comodín asterísco
que produce el mismo resultado, si es que no hay otro(s) archivo(s) cuyo nombre empiece
con la palabra Archivo que también contenga(n) la cadena Cervantes.
CONECTANDO COMANDOS POR MEDIO DE TUBERÍAS:
Si no indicamos algún archivo para grep, entonces toma los datos de la salida estándar. Por
ejemplo. Supongamos que en el sistema hay muchos usuarios pero en particular queremos
saber si el usuario elisa está logueado. Para saberlo podríamos usar una linea como esta:
el comando who nos dice qué usuarios están en el sistema. La barra es una conexión o
“tubería” entre who y grep. | toma la salida de who y la envía como entrada a grep. El
comando grep entonces busca la cadena elisa dentro de la salida de who.
En este par de ejemplos, grep se ha usado como filtro. Debido a que who puede devolver
decenas de líneas, es necesario filtrar esa información. El comando grep es un filtrador
natural en Unix.
BUSCANDO UN PATRÓN SIN IMPORTAR MAYÚSCULAS O MINÚSCULAS:
Podría ocurrir que en alguno de los archivos en los que estamos buscando el apellido
Cervantes, apareciera el apellido de una manera distinta. Digamos CERVANTES o
cervantes; en este caso, con la sola instrucción grep Cervantes Archivo no se obtiene
ningún resultado. Para buscar coincidencias de cadenas sin importar si las letras son
mayúsculas o minúsculas, existe la opción -i en el comando grep:
y obtenemos la salida
Josefina Cervantes
Jose Luis Cervantes
Fernando cervantes
que indica que en Archivo.dat había alguien con apellido Cervantes, que no se mostraba
antes, porque la primera letra estaba en minúsculas.
BUSCANDO CADENAS CON ESPACIOS EN BLANCO
El comando grep también puede ser usado para encontrar expresiones que contengan
espacios en blanco. Por ejemplo, vamos a suponer que deseamos encontrar en nuestra lista
de alumnos en Archivo.dat a el alumno Elisa Griensen. Para hacer la búsqueda bastará
colocar como patrón ese nombre entre comillas sencillas ‘ o comillas dobles “:
En donde, puesto que ya conocemos a nuestro capturista de datos, hemos puesto la opción
-i para indicarle a grep que no debe de tomar en cuenta diferencias entre mayúsculas y
minúsculas. Esta opción puede ir antes o después del patrón. Al ejecutarlo podemos
encontrar:
Elisa griensen
y por la salida, que indica el apellido griensen en minúsculas, sabemos que hemos hecho
bien en incluir la opción -i.
y obtenemos:
6:Elisa griensen