GNU / Linux /

BASH: Buscar texto dentro de archivos

Participa en el tema BASH: Buscar texto dentro de archivos en el foro GNU / Linux.
Gente, tengo la siguiente consulta sobre Linux: Tengo una estructura con un directorio "padre" y ...

Buscar en este tema:
 
  •  
    #1 BASH: Buscar texto dentro de archivos
    Gente, tengo la siguiente consulta sobre Linux:
    Tengo una estructura con un directorio "padre" y varios "hijos"
    /
    /hijo1/
    /hijo2/
    /hijo3/
    ...
    /hijoN/

    Dentro de cada hijo hay N archivos de texto. Dentro de esos archivos de texto puede haber una frase "mi-frase" que quiero:
    - Saber cuantos archivos tienen esa frase
    - Saber cuales archivos tienen esa frase
    - Reemplazar esa frase por otra, de manera que en cada uno de los archivos que estaba "mi-frase" ahora se lea "otra-frase".

    ¿Se puede hacer esto?

    Muchas gracias!
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: BASH: Buscar texto dentro de archivos

    Bueno, la verdad que me vino al pelo tu post, ya que hace mucho que no armaba un script y me puse a practicar un poco armando el tuyo...

    Te escribo aca el script y luego te paso algunas notas al respecto del mismo:

    --------------------------------------Comienzo del Script-----------------------------------------

    #!/bin/sh

    read -p "Ingrese el texto que desea buscar: " texto1
    echo ""
    grep -r "$texto1" Padre/ | awk -F: '{ print $1 }' > listado.txt
    echo "Los archivos donde esta el texto buscado son: "
    echo ""
    contador=`cat listado.txt | wc -l`

    if [ $contador = 1 ]; then
    echo ""
    echo "El texto \"$texto1\" fue encontrado $contador vez"
    echo ""
    else
    echo ""
    echo "El texto \"$texto1\" fue encontrado $contador veces"
    echo ""
    fi

    read -p "Desea reemplazar el texto por otro? [y/n]: " N
    case $N in
    y)
    read -p "Ingrese el texto nuevo: " texto2
    for i in `cat listado.txt`
    do
    cat $i | sed -e s/"$texto1"/"$texto2"/g > $i
    done
    read -p "Desea buscar otro texto? [y/n]: " N
    case $N in
    y)
    rm listado.txt
    ./$0;;
    n)
    rm listado.txt
    (exit);;
    esac;;
    n)

    read -p "Desea buscar otro texto? [y/n]: " N
    case $N in
    y)
    rm listado.txt
    ./$0;;
    n)
    rm listado.txt
    (exit);;
    esac;;
    esac

    ----------------------------------------------Fin del Script------------------------------------------

    Bueno, este script te pregunta al inicio cual es la cadena a buscar, luego si queres modificarla y a continuación te solicita la nueva cadena. Asumi que el directorio desde donde vas a hacer la busqueda se llama "Padre" y el script estaba afuera de ese directorio, asi que eso deberias de cambiarlo por el correcto para vos, si es que el script lo vas a tener fuera del directorio coloca el path completo donde estaria el Directorio Padre. El unico defecto que tiene, mas bien porque no lo perfeccione mucho, es que si en un archivo tenes por ejemplo:

    "hola don pepito" y "hola don pepito2", si lo que queres reemplazar es "hola don pepito" por "hola don jose", te lo va a reemplazar en los 2 y te va a quedar "hola don jose" y "hola don jose2".

    Si queres que te lo mejore para cuestiones como esa, lo reviso, pero creo que por ahora vendria bien.
    Me gusta este mensaje
  • #3 Re: BASH: Buscar texto dentro de archivos

    Hola,
    Genial el script, tanto, que se me ha ocurrido preguntarte...
    Verás, estoy intentando aprender bash y bueno, después de leerme un tutorial, más bien pobre sobre el tema me he lanzado a escribir uno para agregar repositorios, es decir, que busque los que ya estan y los compare con los que yo le escribo y agrege los que no esten, además que comente los descomentados...je, no sé si es demasiado para empezar pero me encanta liarme con estas cosas...

    Hasta ahora he hecho esto(de momento lo hago con un fichero de mi escritorio, cambiaré las rutas cuando esté listo el script):

    #!/bin/sh

    sources=`cat /home/$USER/Escritorio/sources.txt`

    grep -r "$sources" deb\ http://packages.medibuntu.org/\ hardy\ free\ non-free"\n"deb\ http://apt.wicd.net\ hardy\ extras"\n"deb\ http://apt.last.fm/\ debian\ stable"\n"deb\ http://download.virtualbox.org/virtualbox/debian\ intrepid\ non-free"\n"#Gráfica\ intel"\n"deb\ http://ppa.launchpad.net/siretart/ppa/ubuntu\ jaunty\ main"\n"deb-src\ http://ppa.launchpad.net/siretart/ppa/ubuntu\ jaunty\ main"\n"#Webmin"\n"deb\ http://download.webmin.com/download/repository\ sarge\ contrib"\n"#Chrome"\n"deb\ http://ppa.launchpad.net/chromium-daily/ppa/ubuntu\ jaunty\ main"\n"deb-src\ http://ppa.launchpad.net/chromium-daily/ppa/ubuntu\ jaunty\ main

    echo "deb http://packages.medibuntu.org/ hardy free non-free""\n""deb http://apt.wicd.net hardy extras""\n""deb http://apt.last.fm/ debian stable""\n""deb http://download.virtualbox.org/virtualbox/debian intrepid non-free""\n""#Gráfica intel""\n""deb http://ppa.launchpad.net/siretart/ppa/ubuntu jaunty main""\n""deb-src http://ppa.launchpad.net/siretart/ppa/ubuntu jaunty main""\n""#Webmin""\n""deb http://download.webmin.com/download/repository sarge contrib""\n""#Chrome""\n""deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main""\n""deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main" >> /home/$USER/Escritorio/sources.txt

    echo
    echo "NUEVOS REPOSITORIOS AÑADIDOS"
    echo


    #Fin del script...

    Je, sé que me queda mucho por recorrer, aquí estoy bloqueado, no sé cómo juntarlo, supongo que con un test y un if? en fin, si me puedes dar algún consejillo sobre qué sería interesante aprender o algún tutorial bueno, pues yo agradecido, y si no pues agradecido igualmente.

    Un saludo.
    Editado por josecash - 20.10.2009 13:38 hs.
    Me gusta este mensaje


Estadísticas del tema
  • 2 RESPUESTAS
  • 9037 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB