Вы находитесь на странице: 1из 13

GREP

El shell de linux: Comando grep


El comando grep nos permite buscar, dentro de los archivos, las lneas que
concuerdan con un patrn. Bueno, si no especificamos ningn nombre de
archivo, tomar la entrada estndar, con lo que podemos encadenarlo con
otros filtros.
Por defecto, grep imprime las lneas encontradas en la salida estndar. Es
decir, que podemos verlo directamente la pantalla, o redireccionar la salida
estndar a un archivo.
Como tiene muchsimas opciones, vamos a ver tan slo las ms usadas:
-c En lugar de imprimir las lneas que coinciden, muestra el nmero de lneas
que coinciden.
-e PATRON nos permite especificar varios patrones de bsqueda o proteger
aquellos patrones de bsqueda que comienzan con el signo -.
-r busca recursivamente dentro de todos los subdirectorios del directorio
actual.
-v nos muestra las lneas que no coinciden con el patrn buscado.
-i ignora la distincin entre maysculas y minsculas.
-n Numera las lneas en la salida.
-E nos permite usar expresiones regulares. Equivalente a usar egrep.
-o le indica a grep que nos muestre slo la parte de la lnea que coincide con el
patrn.
-f ARCHIVO extrae los patrones del archivo que especifiquemos. Los patrones
del archivo deben ir uno por lnea.
-H nos imprime el nombre del archivo con cada coincidencia.
Veamos algunos ejemplos:
- Buscar todas las lneas que contengan palabras que comiencen por a en un
archivo:
$ grep '\<a.*\>' archivo
Otra forma de buscar, sera:
$ cat archivo | grep "\<a.*\>"
- Mostrar por pantalla, las lneas que contienen comentarios en el archivo
/boot/grub/menu.lst:
$ grep "#" /boot/grub/menu.lst
- Enviar a un fichero las lneas del archivo /boot/grub/menu.lst que no son
comentarios:

GREP
$ grep -v "#" /boot/grub/menu.lst
- Contar el nmero de interfaces de red que tenemos definidos en el fichero
/etc/network/interfaces:
$ grep -c "iface" /etc/network/interfaces
- Mostrar las lneas de un fichero que contienen la palabra BADAJOZ o HUELVA:
$ grep -e "BADAJOZ" -e "HUELVA" archivo
- Mostrar las lneas de un fichero que contienen la palabra BADAJOZ o HUELVA,
numerando las lneas de salida:
$ grep -n -e "BADAJOZ" -e "HUELVA" archivo
- Mostrar los ficheros que contienen la palabra TOLEDO en el directorio actual y
todos sus subdirectorios:
$ grep -r "TOLEDO" *
Veamos algunos ejemplos con expresiones regulares:
- Obtener la direccin MAC de la interfaz de red eth0 de nuestra mquina:
$ ifconfig eth0 | grep -oiE '([0-9A-F]{2}:){5}[0-9A-F]{2}'
Sacamos la direccin MAC de la interfaz eth0 de nuestra mquina haciendo un:
ifconfig eth0
Y aplicando el filtro grep:
grep -oiE '([0-9A-F]{2}:){5}[0-9A-F]{2}'
Las opciones que he usado en grep son:
-o Indica que la salida del comando debe contener slo el texto que coincide
con el patrn, en lugar de toda la lnea, como es lo habitual.
-i Lo he usado para que ignore la distincin entre maysculas y minsculas.
-E Indica que vamos a usar una expresin regular extendida.
En cuanto a la expresin regular, podemos dividirla en dos partes:
([0-9A-F]{2}:){5} Buscamos 5 conjuntos de 2 carateres seguidos de dos
puntos
[0-9A-F]{2} seguido por un conjunto de dos caracteres.
Como las direcciones MAC se representan en hexadecimal, los caracteres que
buscamos son los nmeros del 0 al 9 y las letras desde la A a la F.
- Extraer la lista de direcciones de correo electrnico de un archivo:

GREP
grep -Eio '[a-z0-9._-]+@[a-z0-9.-]+[a-z]{2,4}' fichero.txt
Utilizo las mismas opciones que en el caso anterior:
-o Indica que la salida del comando debe contener slo el texto que coincide
con el patrn, en lugar de toda la lnea, como es lo habitual.
-i Lo he usado para que ignore la distincin entre maysculas y minsculas.
-E Indica que vamos a usar una expresin regular extendida.
Analicemos ahora la expresin regular:
[a-z0-9._-]+@[a-z0-9.-]+[a-z]{2,4}
Al igual que antes, la vamos dividiendo en partes:
[a-z0-9._-]+ Una combinacin de letras, nmeros, y/o los smbolos . _ y - de
uno o ms caracteres
@ seguido de una arroba
[a-z0-9.-]+ seguido de una cadena de letras, nmeros y/o los smbolos . y [a-z]{2,4} seguido de una cadena de entre dos y cuatro caracteres.
- Obtener la direccin IP de la interfaz de red eth1 de nuestra mquina:
$ ifconfig eth1 | grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v 255
En el ejemplo anterior, hemos tomado la informacin que nos ofrece ifconfig:
ifconfig eth1
Hemos filtrado dicha informacin 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
direccin de broadcast junto con la mscara de red para quedarnos slo con la
direccin IP de la mquina:
grep -v 255
La lnea anterior no mostrara las lneas que no contengan el valor 255, es
decir, las direcciones de broadcast y mscara de red.
Analicemos ahora el comando grep:
grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}'
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 slo el texto que coincide

GREP
con el patrn, en lugar de toda la lnea, como es lo habitual.
-i Lo he usado para que ignore la distincin entre maysculas y minsculas.
-E Indica que vamos a usar una expresin regular extendida.
En cuanto a la expresin regular:
'([0-9]{1,3}\.){3}[0-9]{1,3}'
([0-9]{1,3}\.){3} Representa 3 bloques de entre uno y tres dgitos separados
por puntos. Observemos que como el punto es un metacaracter, tengo que
usar el caracter de escape \ para que no sea interpretado como un
metacaracter, sino como un caracter normal.
[0-9]{1,3} Representa el ltimo bloque de la direccin IP, que est formado
por un nmero de entre 1 y 3 dgitos.
- See more at: http://enavas.blogspot.com.es/2008/04/el-shell-de-linuxcomando-grep.html#sthash.xPMfyNtK.dpuf

GREP

Ejemplos[editar]
Para mostrar todas las lneas 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 lneas que no contengan la cadena tal, se usa -v:

$ grep -v tal *
Para mostrar slo el nombre de tales archivos, se usa -l:

$ grep -l tal *
Para mostrar slo el nombre de los archivos que no contienen la cadena, se usa -L:

$ grep -L tal *
Para buscar recursivamente, no slo en los archivos del directorio actual sino tambin en los de sus subdirectorios (donde "."
representa el directorio actual), se usa -r:

$ grep -r tal .
En solaris no funciona el parmetro -r. Para obtener la misma funcionalidad, se debe utilizar adems el comando find y el
comando exec (Recordemos, el parmetro -l mostrar nicamente el nombre del archivo que contenga la cadena "tal"):

$ find . -name "*.*" -exec grep -l "tal" {} \;


La opcin -r puede no estar disponible en todas las plataformas Unix. De ser as utilizar:

$ find . -type f | xargs grep tal .


Para buscar todas las lneas que comienzan por Ahora y terminan con siempre seguido de una cantidad arbitraria de espacio
en blanco (ntese que el carcter ^representa el inicio de la lnea, as como $ representa el final):

$ grep '^Ahora.*siempre *$'


Para hacer que grep lea de la entrada estndar, no se especifica archivo alguno. Por ejemplo, como

ps -ef

lista todos los

procesos actualmente en ejecucin, el siguiente comando imprime todos los procesos que est ejecutando el usuario actual:

$ ps -ef | grep $USER

GREP
o

$ ps -efa | grep $USER


Mostrar las cuentas de usuarios que presenten actividad en ese momento.

COMANDO GREP LINUX


Etiquetas: Comandos linux
NOMBRE
grep, egrep, fgrep - lneas de impresin que coincidan con un patrn

SINTAXIS
grep [opciones] patrn [archivo ...] grep [opciones] [-e PATRN |-f archivo]
[archivo ...]

DESCRIPCIN
Grep busca en los archivos de entrada el nombre (o entrada estndar si no hay
ningn archivo nombre o el nombre del archivo - se le da) para las lneas que
contengan una coincidencia con el dada PATRN. Por defecto, grep muestra las
lneas coincidentes.Adems, dos programas de la variante egrep y fgrep estn
disponibles. Egrep es el mismo que grep-E. Fgrep es el mismo que grep-F.

ejemplo:
$ cat archivo_demo1
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO
esta es la primer linea en minusculas de este archivo
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula
Hay dos lineas vacias sobre esta

GREP
Y esta es la ultima linea
$ cp /tmp/archivo_demo1 /tmp/archivo_demo2

Uso bsico, buscar una cadena en un archivo


$ grep "esta" archivo_demo1
esta es la primer linea en minusculas de este archivo
Hay dos lineas vacias sobre esta
Y esta es la ultima linea

Buscar una cadena en varios archivos


$ grep "esta" archivo_demo*
archivo_demo1:esta es la primer linea en minusculas de este archivo
archivo_demo1:Hay dos lineas vacias sobre esta
archivo_demo1:Y esta es la ultima linea
archivo_demo2:esta es la primer linea en minusculas de este archivo
archivo_demo2:Hay dos lineas vacias sobre esta
archivo_demo2:Y esta es la ultima linea

Buscar sin coincidencia entre maysculas y minsculas (uso del


argumento -i)
$ grep -i "esta" archivo_demo1
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO
esta es la primer linea en minusculas de este archivo
Esta Es La Primer Linea Con El Primer Caracter De Cada Palabra Con Mayuscula
Hay dos lineas vacias sobre esta
Y esta es la ultima linea

Buscar expresiones regulares


$ grep "esta.*linea" archivo_demo1
esta es la primer linea en minusculas de este archivo
Y esta es la ultima linea

GREP
opciones

-A NUM, - despus de context = NUM Imprimir las lneas de NUM de


contexto posterior despus de las lneas coincidentes. Coloca una lnea que
contiene-entre grupos contiguos de partidos.
-A, - el texto Procesar un archivo binario como si se tratara de texto, lo que es
equivalente a del - de los archivos binarios = texto de la opcin.

NUM-B, - antes-context = NM Imprimir las lneas de NUM de contexto de


liderazgo antes de hacer coincidir las lneas. Coloca una lnea que contieneentre grupos contiguos de partidos.

-C NUM, - context = NM Imprimir las lneas de NUM de contexto de salida.


Coloca una lnea que contiene - entre los grupos contiguos de los partidos.

-B, - byte-offset Imprimir el desplazamiento de bytes en el fichero de entrada


antes de cada lnea de de salida.

- Binary-files = TIPO Si los primeros bytes de un archivo indica que el archivo


contiene datos binarios, se supone que el archivo es de tipo Type. De forma
predeterminada, TIPO es binario, y grep normalmente emite ya sea una lnea
de men- el sabio diciendo que un binario mensaje de los partidos de archivos, o
no si hay no es rival. Si son sin-partido, grep se supone que un archivo binario
no est de acuerdo; esto es equivalente a la opcin-I. Si TYPE es el texto, grep
procesa un archivo binario como si fuera texto, lo que es equivalente a la
opcin-a. Advertencia: grep - Binarios de los archivos de texto = podra emitir
la basura binaria, que puede tener efectos secundarios desagradables si la
salida es una terminal y si la termi- nal controlador interpreta algunas de ellas
como comandos.

- [Color = CUNDO], - [color = CUNDO] Envolvente de la cadena


coincidente con el marcador de encontrar en GREP_COLOR variable de entorno.
CUNDO puede ser 'nunca', 'siempre' o 'auto'

GREP
-C, - count Suprime la salida normal, en lugar de imprimir un recuento de las
lneas que coincidan para cada archivo de entrada. Con el V-, - Invertir-partido
opcin (ver abajo), cuenta que no coinciden las lneas.

ACCIN-D, - devices = ACCIN Si un archivo de entrada es un dispositivo,


PEPS o hembra, utilizar la accin a favor de la proceso ella. De forma
predeterminada, la accin es leer, lo que significa que los dispositivos se leen
como si fueran archivos comunes. Si la accin es saltar, los dispositivos estn
en silencio omitido.

-D de accin, - directories = ACCIN Si un archivo de entrada es un directorio,


utilice la accin para procesar. Por por defecto, la accin es leer, lo que
significa que los directorios son ledos como si fueran archivos comunes. Si la
accin se vaya, direc- rios se omite en silencio. Si la accin es recurse, grep lee
todos los archivos en cada directorio, de forma recursiva, lo que es equivalente
a la opcin-r.

-E, - extended-regexp Interpretar PATRN como una expresin regular


extendida (vea abajo).

PATRN-e, - regexp = PATRN Usar PATRN como el patrn; til para proteger
a los patrones de inicio con -.

-F, - perodo de cadenas Interpretar PATRN como una lista de cadenas fijas,
separadas por la nueva lneas, cualquiera de los cuales es a ser igualado.

-P, - perl-regexp Interpretar patrn como una expresin regular en Perl.

-F ARCHIVO, - file = ARCHIVO Obtener los patrones de archivo, uno por lnea. El
archivo vaco con- distribucin contiene los patrones de cero, por lo que no
coincide con nada.

GREP
-G, - basic-regexp Interpretar patrn como una expresin bsica regular (ver
ms abajo). Este es el valor predeterminado.

-H, - with-nombre del archivo Imprimir el nombre del archivo para cada
partido.

-H, - no-filename Suprimir la prefijos de nombres de archivo en la salida


cuando varios los archivos se buscan.

- Ayudar a generar un mensaje breve ayuda.

-Puedo procesar un archivo binario como si no contena datos que


corresponden; esto es equivalente a la - binary-files = sin-partido opcin.

-I, - ignore-case No haga caso de las distinciones de caso en el patrn y la


entrada de la archivos.

-L, - archivos-sin-partido Suprime la salida normal, en lugar de imprimir el


nombre de cada entrada archivo desde el que no hay salida normalmente han
sido impresos. La bsqueda se detendr en el primer partido.

-L, - archivos-con-partidos Suprime la salida normal, en lugar de imprimir el


nombre de cada entrada archivo desde el que sale normalmente habra sido
impresa. La bsqueda se detendr en el primer partido.

NUM-m, - max-count = NUM Deja de leer un archivo despus de NUM lneas


coincidentes. Si la entrada es la entrada estndar de un archivo normal, y las
lneas son coincidentes NUM salida, grep asegura que la entrada estndar est
posicionada para justo despus de la ltima lnea de juego antes de salir,
independientemente de la presencia de lneas de contexto posterior. Esto
permite una llamada procesar a reanudar la bsqueda. Cuando se detiene
despus de grep NUM juego lneas, imprime todas las lneas de contexto
posterior. Cuando el c-o - Opcin de recuento tambin se utiliza, grep no se

GREP
muestre un nmero de mayor que NUM. Cuando la v-o - sin puesta a coincidir
tambin utilizado, grep se detiene despus de la salida de NUM que no
coinciden las lneas.

- Mmap Si es posible, utilice el mmap (2) la llamada al sistema para leer la


entrada, en lugar de la llamada por defecto del sistema de lectura (2). En
algunas situaciones, - mmap se obtiene un mejor rendimiento. Sin embargo, mmap puede causar indefinido comportamiento (incluyendo los volcados de
memoria) si se reduce un archivo de entrada, mientras que grep est
funcionando, o si se produce un error de E / S.

-N, - line-number Prefijo en cada lnea de salida con el nmero de lnea dentro
de su entrada archivo.

-O, - slo de coincidencia Mostrar slo la parte de una lnea coincidente que
coincide con el patrn.

- Label = ETIQUETA Muestra la entrada en realidad viene de la entrada


estndar como entrada com- ING de etiqueta de archivo. Esto es
especialmente til para herramientas como zgrep, por ejemplo, gzip-cd fuu.gz |
grep-H - label = foo algo

- Line-buffer Utilizar tampn de lnea, puede ser una penalidad rendimiento.

-Q, - quiet, - silent Tranquilo, no escriba nada en la salida estndar. Salir de


inme- tamente con el cero de estado si se encuentra una coincidencia, aunque
un error Se detect. Vea tambin la-s o - opcin sin mensajes.

-R,-R, - recursive Lea todos los archivos en cada directorio, de forma recursiva,
lo que es equivalente- valente a la opcin-d recurse.

- Incluir patrn = Recursividad en directorios de slo buscar el archivo de


patrones.

GREP

- Excluir patrn = Recursividad en directorios de salto archivo de patrones.

-S, - no-mensajes Suprimir mensajes de error sobre los archivos inexistentes o


ilegibles. Portabilidad nota: a diferencia de GNU grep, grep tradicionales no
con- formar a POSIX.2, porque grep tradicional careca de una opcin-q y la
opcin-s se comport como GNU grep de opcin-q. Shell scripts la intencin de
ser portable a grep tradicional debe evitar tanto el-q y-s y debe redirigir la
salida a / dev / null en su lugar.

-U, - binary Tratar el archivo (s) como binario. Por defecto, bajo MS-DOS y MSWindows, grep adivina el tipo de archivo al mirar los contenidos de la primera
32KB lee desde el archivo. Si grep decide el archivo es un archivo de texto,
quita los caracteres CR de la original contenido del archivo (para hacer
expresiones regulares con ^ y $ de trabajo correctamente). Al especificar-U
anula esta conjetura, causando todo los archivos que se leen y se pasa al pie
de la letra el mecanismo de juego; si el archivo es un archivo de texto con
pares CR / LF al final de cada la lnea, esto har que algunas expresiones
regulares al fracaso. Este opcin no tiene efecto en las plataformas que no sea
MS-DOS y MS-Windows ventanas.

-U, - unix-byte-offsets Informe al estilo Unix desplazamientos de bytes. Esta


opcin hace que grep informar desplazamientos de bytes como si el archivo se
estilo Unix archivo de texto, es decir, con caracteres CR quit. Esto producir
resultados idnticos a ejecutar grep en una mquina Unix. Esta opcin no tiene
efecto a menos opcin-b tambin se usa, no tiene efecto sobre plataformas
que no sean de MS-DOS y MS-Windows.

-V, - version Imprimir el nmero de versin de grep en el error estndar. Esta


versin- nmero de Sin deben ser incluidos en todos los informes de errores
(ver ms abajo).

-V, - invert-match Invertir el sentido de la concordancia, para seleccionar las


lneas que no coinciden.

GREP
-W, - word-regexp Seleccione slo aquellas lneas que contienen los partidos
que forman su conjunto palabras. La prueba es que la subcadena coincidente o
bien debe ser al comienzo de la lnea, o precedida por una no-palabra concarcter constituyente. De manera similar, debe ser o bien al final de la lnea o
seguido de un carcter constituyente no-palabra. Palabra- personajes que lo
forman son letras, dgitos y el subrayado.

-X, - line-regexp Seleccione slo los partidos que coinciden exactamente con
toda la lnea. Obsoleto-y sinnimo de-i.

-Z, - null Un byte cero (el carcter ASCII NUL) en lugar del carcter que sigue
normalmente un nombre de archivo. Por ejemplo, grep -LZ genera un byte cero
despus de cada nombre de archivo en lugar de la habitual de nueva lnea.
Esta opcin hace que la salida sin ambigedades, incluso en la presencia de
nombres de archivo con caracteres especiales, como saltos de lnea. Esta
opcin se puede utilizar con comandos como buscar -Print0, perl -0, z-tipo, y
xargs -0 para procesar arbitraria nombres de los archivos, incluso aquellos que
contienen caracteres de nueva lnea.
- See more at: http://redesytrucos.blogspot.mx/2012/02/comando-greplinux.html#sthash.e4iWZgFu.dpuf

Вам также может понравиться