Aprendiendo a usar grep con ejemplos

En este ejemplo tenemos dos ficheros, en uno tenemos una lista de usuarios, en el segundo tenemos otra lista de usuarios donde existen algunas coincidencias entre ambos. El objetivo es crear un fichero nuevo donde existan solamente las coincidencias del fichero 1 en el fichero 2.

El formato del fichero1 es:

lilibet
liliana

El formato del fichero2 es:

brians:Z3wW4ZPHNTNV2
alain:Hc9QJlKxDXyO.
lilibet:uUIoYbAUJ6Ecc
maria:zNge5unPZrnzI
liliana:o0EbbZXD4gC8M

Nuestro objetivo es recuperar las líneas del fichero2 que coinciden con el fichero1.

Muchas podrían ser las posibilidades de lograr nuestro objetivo, pero voy a utilizar el comando grep para practicar su uso.

Vamos paso a paso.

si ejecutamos

grep lilibet fichero2 > fichero3

tenemos el resultado en fichero3

lilibet:uUIoYbAUJ6Ecc

o sea que recuperamos el dato para el usuario lilibet.

Para el caso de un solo usuario, con el comando anterior podríamos resolver, pero que tal si los ficheros tienen miles de usuarios por línea ?

Si con el comando grep podemos recuperar la línea correspondiente a un parametro previamente asignado, si repetimos este comando para cada uno de las líneas del fichero1 de forma automática y luego para cada salida adicionamos el resultado en un fichero3 podríamos recuperar la información que necesitamos.

Básicamente lo que haremos será recorrer el fichero1 de arriba hacia abajo, almacenar cada línea en una variable y luego pasar esta variable como patrón del comando grep al fichero2. Al final de la línea del comando redireccionamos el resultado a un fichero3.

Para esto crearemos un fichero limpia.sh que tendrá permisos 750.

limpia.sh:

#!/bin/bash
for i in `cat fichero1`
do
    grep "${i}:" fichero2 >> fichero3
done

donde:

"${i}:"

Es el patrón de búsquda. ${i} es la variable que irá cambiando de valor según las líneas del fichero1, los : forman parte del patrón y ayudan a la hora de hacer la búsqueda. Las comillas dobles enmarcan el patrón de búsqueda y hacen que la variable sea válida dentro del patrón.

>>

Permite adicionar al final de línea el resultado de cada una de las coincidencias encontradas al fichero3.

De esta forma, al ejecutar el script, el valor del fichero3 debe ser:

lilibet:uUIoYbAUJ6Ecc
liliana:o0EbbZXD4gC8M

11 respuestas a Aprendiendo a usar grep con ejemplos

  1. soy una estudiante de ing informatica y quiero saber algo mas sobre el comando grep si saben algo de el escribanme a mi email teffixitas_9@hotmail.com
    xao!

    TeffixitaZ ♥

  2. ramon vergara dice:

    Muchas gracias por la ayuda, me sirvio mucho

  3. ramon vergara dice:

    Me di cuenta que tu script solo sirve para buscar strings que no incluyan puntos:

    lilibet
    liliana

    Pero si existe un punto en alguna de esas cadenas de caracteres solo busca el ultimo string, es decir

    1.2.3.4
    2.3.4.5
    3.4.5.6

    Solo busca 3.4.5.6 ???

    Porqe sucede eso???

    como lo puedo solucionar, pues necesito sacar informacion de ips en un archivo txt.

    • daivid dice:

      Muy interesante el artículo sobre el comando Grep pero muy corto, sinceramente el Grep tiene muchisimas opciones y se le puede sacar muchisimo partido, no obstante xml se ha basado en muchas de las opciones del grep.

      OPCIONES DEL GREP:
      -C : Muestra solo el número de líneas que coinciden con el patron.
      -N : Muestra el número de lineas y además muestra el contenido.
      -L : Al grep se le puede pasar mas de un fichero por ejemplo:
      grep opc… exp .. f1 f2 f3
      Entonces muestra el fichero que contiene la expresion que se le ha pasado.
      -I : No distingue entre mayusculas ni minúsculas.
      -W : Para q considere que ha encontrado una palabra del patrón debe de coincidir la palabra completa no solo una parte.
      Ejemplo si le digo que busque fich
      fich3.txt –> no porq no es la palabra completa es diferente
      fich.txt –> tampoco
      fich –> si
      -V : Le dice que busque aquella línea que NO contengan el patrón.

      CARACTERES ESPECIALES:

      ^ –> indica que la palagra empieza por el carácter que le sigue.
      Ejemplo:
      ls -1 | grep ‘^f’ –> me dices que palabras empiezan por f.
      ls -1 | grep ‘^fic’ –> me dices que palabras empiezan por fic.
      $ –> indica que el caracter que se le antepone termina el fichero.
      Ejemplo:
      ls -1 | grep ‘txt$’ –> me dices que palabras terminan por txt.

      Ejemplo de INDICAR COMIENZO Y FIN:
      ls -1 | grep ‘^fich$’ –> me dices que palabras empiezan por fich y terminan por fich. (parecido al grep -w)

      . –> es un comodín que reemplaza a un solo carácter. (pero uno solo)
      Ejemplo:
      ls -1 | grep ‘^File.txt$’ –> que me busque aquellos ficheros que sean file1txt o file2txt o filextxt
      Si quiero que el punto se interpretado como literal hay que escaparlo \.
      ls -1 | grep ‘^File.\.txt$’ –> que me busque aquellos ficheros que sean file1.txt o file2.txt o filex.txt
      ls -1 | grep ‘^….$’ –> Busca palabras que contengan cuatro caracteres.

      [] –> corchetes conteniendo un conjunto de caracteres indica que se puede elegir entre un conjunto de caracteres-
      Ejemplo:
      ls -1 | grep ‘^File[123]\.txt$’ –> file1.txt, file2.txt, file3.txt

      Otra Forma:
      (a|b|c) la barra vertical es suceptible de ser interpretada por la shel porq es una tuberia por lo tanto hay q escaparlo.
      ls -1 | grep ‘^File\(1\|2\|3\)\.txt$’

      Ventajas:
      [] Si quieres estar dando opcion entre caracteres unicos solos –> usar corchetes de arriba
      Ejemplo: [a-z] todos los caracteres de a a la z
      [0-9] todos los numeros
      [a b c] o a o b o c
      (||) Si quieres cadenas ya una palabra u otra palabra –> usar el de abajo parentesis escapados

      Como expresamos cantidades conforme el numero de caracteres:
      \? –> una vez como máximo. ¿0?
      \+ –> el simbolo más indica que el carácter al que acompaña se repite una o más veces.
      * –> se repite 0, 1, o más veces.
      Ejemplo:
      Si desconozco que es lo que va a venir despues de Fich:
      ls -1 | grep ‘^Fich.*\.doc$’ –> aparece 0 una o mas veces –> Fich.doc o Fich5.doc o Fichero.doc
      ls -1 | grep ‘^Fich.\+\.doc$’ –> aparece una o mas veces

      {} –> entre llaves el numero de veces q queremos que se repita.
      ls -1 | grep ‘^Fich.\{3\}\.doc$’
      ls -1 | grep ‘^Fich.\{1, 3\}\.doc$’ –> le estoy diciendo que se va a repetir de 1 a 3 veces. Fich001.doc, Fich002, Fich003
      ls -1 | grep ‘^Fich.\{, 3\}\.doc$’ –> aqui le digo que como máximo va a aprecer 3 veces. Podemos dejar abierto el tamaño de las llaves tanto por arriba como por abajo.

      ‘^c’ –> cualquier palabra que empiece por c.
      ‘^[abc] –> cualquier palabra que empice por a o por b o por c
      ‘^[^0-9] –> todas las palabras que no comiencen por un numero. es lo mismo que poner GREP -V.

  4. Fernando dice:

    Cómo puedo hacer que al hacer una busqueda con GREP, los resultados se impriman a un archivo, por ejemplo un TXT, en vez de que los resultado se impriman en pantalla?
    De ya, gracias
    Fernando

  5. Roberto dice:

    Como podría hacer para buscar en un archivo dos patrones distintos y que me escriba los patrones en orden. Por ejemplo, en un archivo busco patron1 y patron2 y digamos que consigue 10 patron1 y 10 patron2. Como hacer para que los escriba en este formato:
    patron1[1] patron2[1]
    patron1[2] patron2[2]
    :
    :
    patron1[10] patron2[10]

    y no con este formato:
    patron1[1] patron1[2]…patron1[10]
    patron2[1] patron2[2]…patron2[10]

    Saludos y gracias.

  6. Marguerite dice:

    These are really impressive ideas in on the topic of blogging.
    You have touched some fastidious points here. Any way keep up
    wrinting.

  7. I am in fact grateful to the holder of this web
    site who has shared this wonderful paragraph at at this
    time.

  8. pixnet.net dice:

    Hi! Do you know if they make any plugins to help
    with SEO? I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very
    good results. If you know of any please share.
    Kudos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: