Varios ejemplos de uso del comando grep

En esta publicación lo que sobran son las palabras y vamos directo a los hechos. A continuación veremos varios ejemplos del uso del comando grep.

Usamos grep para buscar una palabra dentro de un archivo en Linux, pero… ¿hasta donde podemos llegar con su uso?

A continuación, en cada ejemplo, intentaremos trabajar con dos archivos de demostración iguales a los siguientes:
[CODE]
$ 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
Y esta es la ultima linea
$ cp /tmp/archivo_demo1 /tmp/archivo_demo2
[/CODE]

[CODE]
$ 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
[/CODE]

[CODE]
$ 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
[/CODE]

[CODE]
$ 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
[/CODE]

[CODE]
$ grep “esta.*linea” archivo_demo1
esta es la primer linea en minusculas de este archivo
Y esta es la ultima linea
[/CODE]

En este ejemplo buscamos aquellas líneas que contienen la palabra “esta” y luego de cualquier texto (*) continúan con “linea”. Para más operadores de expresiones regulares se recomienda leer la documentación del grep.

[CODE]
$ grep -iw “de” archivo_demo1
[/CODE]

[CODE]
$ grep -A2 “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
$grep -A1 “ESTA” archivo_demo1
ESTA ES LA PRIMER LINEA EN MAYUSCULAS DE ESTE ARCHIVO
esta es la primer linea en minusculas de este archivo
[/CODE]

[CODE]
$ grep -B1 “ultima” archivo_demo1
Hay dos lineas vacias sobre esta
Y esta es la ultima linea
[/CODE]

[CODE]
$ grep -C1 “minusculas” 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
[/CODE]

Es necesario setear las variables de entorno GREP_OPTIONS y GREP_COLOR
[CODE]
$ export GREP_OPTIONS=’–color=auto’ GREP_COLOR=’100;8′
[/CODE]

Cuando necesitas buscar una cadena en los archivos del directorio actual y sus subdirectorios. El siguiente ejemplo buscaría la palabra “auto” en todos los archivos del directorio actual y sus subdirectorios.
[CODE]
$ grep -r “auto” *
[/CODE]

[CODE]
$ grep -iv “primer” archivo_demo1

Hay dos lineas vacias sobre esta
Y esta es la ultima linea
[/CODE]

[CODE]
$ cat archivo_demo3
a
b
c
d

$ grep -v -e “a” -e “b” -e “c” archivo_demo3
d
[/CODE]

[CODE]
$ grep -c “esta” archivo_demo1
3
$ grep -ic “esta” archivo_demo1
5
[/CODE]

[CODE]
$ grep -l “esta” archivo_demo*
archivo_demo1
archivo_demo2
[/CODE]

Por defecto el comando grep muesrta la línea completa de la cadena o patrón dado, pero si solo quieres mostrar dicha cadena o patrón puedes utilizar el argumento -o.

Nota la diferencia en el ejemplo:
[CODE]
$ grep “es.*linea” archivo_demo1
esta es la primer linea en minusculas de este archivo
Y esta es la ultima linea
$
$ grep -o “es.*linea” archivo_demo1
esta es la primer linea
esta es la ultima linea
[/CODE]

[CODE]
$ grep -bo “es.*linea” archivo_demo1
54:esta es la primer linea
222:esta es la ultima linea
$
$ grep -bo “es.*linea” archivo_demo*
archivo_demo1:54:esta es la primer linea
archivo_demo1:222:esta es la ultima linea
archivo_demo2:54:esta es la primer linea
archivo_demo2:222:esta es la ultima linea
[/CODE]

[CODE]
$ grep -no “es.*linea” archivo_demo*
archivo_demo1:2:esta es la primer linea
archivo_demo1:7:esta es la ultima linea
archivo_demo2:2:esta es la primer linea
archivo_demo2:7:esta es la ultima linea
[/CODE]

Vía: The Geek Stuff

Tags: , , , , ,


  • Hugo Mora

    Usando el comando grep cómo hago para buscar, por ejemplo, todas las lineas que empiecen con la letra a, o que terminen con la letra a?

    Reply

  • Mario

    @Hugo Mora y aportando un ejemplo mas

    un ejemplo fácil seria un fichero llamado “ejemplo” que contenga la siguiente información

    ejemplo
    ——————————–
    papa casa armando
    album capitan
    algodon
    miguel mama
    —————————-
    $grep –color ^a ejemplo
    album capitan
    algodon

    $grep –color ^alg ejemplo
    algodon

    $grep –color a$ ejemplo
    miguel mama

    Saludos!!!

    Reply

  • Gorilonse

    muy bueno! me re sirvio todo!!!
    y todo funciona de 10s!
    gracias!
    XD

    Reply

  • aioroslee

    Muchisimas gracias,la verdad que esto vale oro para los que queremos aprender mas de los comandos de linux pero no nos llevamos bien con el ingles.vos esto lo aprendiste mirando el MAN?

    Reply

  • matias

    hola amigos..una pregunta urgente …como hago para que un script me despliegue todos los usuarios definidos en el sistema cuo nombre comience con “alu” y termine con “mno”.
    agradezco su aporte..

    Reply

  • arwen

    hola, si yo quiero que me diga las ocurrencias y pongo

    grep -c “palabra” fichero.txt

    me da las lineas, pero es posible que una plabara este dos veces en la misma linea, entonces que hago? porque me da el mismo resultado, por lo tanto no distingue palabras sino lineas, entonces como puedo hacer que me diga las palabras q coinciden con la q le paso?

    Reply

  • ems

    En un archivo de texto, cómo puedo extraer las líneas de la 5 a la 20 y copiarlas a otro archivo, yo utilicé algo como lo siguiente pero no funciona:

    grep [5..20] arch.txt > nvo.txt

    Alguien me puede ayudar??

    Reply

  • prodigy

    #!/bin/bash

    if [ -f $1 ]
    then
    for aparicion in `cat $1 | grep -c $2`
    do
    contador=$(($contador+$aparicion))
    done
    echo $contador
    fi

    arwen ESPERO QUE TE SIRVA….

    Reply

  • prodigy

    ems

    tenes que trabajar con split no con grep

    seria algo asi

    split -l 5 ficheroACortar FicherosNuevos -d

    Reply

  • jose

    porque borraron lo que publique???

    Reply

  • jose

    matias octubre 14th, 2011 at 9:21 am

    hola amigos..una pregunta urgente …como hago para que un script me despliegue todos los usuarios definidos en el sistema cuo nombre comience con “alu” y termine con “mno”.
    agradezco su aporte.

    espero que te sirva…

    who | grep ^alu | awk ‘{print $1}’

    Reply

  • bj

    arwen octubre 20th, 2011 at 4:21 am

    hola, si yo quiero que me diga las ocurrencias y pongo

    grep -c “palabra” fichero.txt

    me da las lineas, pero es posible que una plabara este dos veces en la misma linea, entonces que hago? porque me da el mismo resultado, por lo tanto no distingue palabras sino lineas, entonces como puedo hacer que me diga las palabras q coinciden con la q le paso?

    Espero que te sirva…

    #!/bin/bash
    if [ -f $1 ]
    then
    cantidad=0
    for aparicion in `cat $1 | grep -o $2`
    do
    contador=$(($contador+1))
    done
    echo $contador
    fi

    Reply

  • Ixsul

    Para contar todas las ocurrencias (aunque esten en la misma linea) podría usarse:

    grep -o [CADENA] [FICHERO] | grep -c [CADENA]

    Reply

  • victorhck

    Muy buena recopilación me fue de gran ayuda.
    Gracias por el aporte !!

    Reply

  • Victor

    Buenas a todos:
    Una ayuda, tengo varios directorios donde cada uno contiene una serie de archivos logs (estos contienen tramas, de las cuales deseo buscar un numero de telefono en particular), quiero realizar una busqueda que recorra por cada uno de los directorios, tengo una linea que no funciona muy bien alguien lo puede mejorar:

    for z in ls *; do grep NUMERO $z/*;done

    Gracias.

    Reply

  • Francisco

    Buenas a todos están muy interesante los post, pero ahora necesito un poco de ayuda puesto que necesito buscar por rangos de fechas dentro de un archivo… les agradecería su ayuda.

    Reply

  • chente

    Buenas podrían hacerme el trabajo de clase que necesito entregar el viernes…Animales!!!

    Reply

  • Bash Novel

    Con grep -c lo_buscado archivo.txt > resultado.txt guardo el numero de ocuurencias pero como hago para que en resultados me gurde lo_buscado;#ocurrencias. es que tengos varios patrones de busqueda pero no los quiero desplefar uno a uno es ineficiente y conduce a error.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *