domingo, 1 de enero de 2012

Sencillo script para sustitución masiva de texto

Hola! Feliz año!

Aquí os dejo un sencillo script para realizar sustitución masiva de texto en muchos ficheros a la vez.
La verdad es que con el comando sed se pueden hacer muchas más cosas, pero a mi con esto me vale y simplifica mucho mis cosillas. Como no se puede completar/complicar y hacerlo más efectivo, pero eso se lo dejo a quien tenga más necesidades que yo.
A ver, abri un fichero en blanco, por ejemplo, desde la línea de comandos con el vi:

#vi sustitucion_texto.sh

Pulsar i para ponernos en modo inserción y pegar todo lo siguiente:

#!/bin/bash
# Script sustitución masiva de contenido de ficheros
# Arg.1: texto a sustituir
# Arg.2: texto sustituto
# Arg.3: Ficheros donde sustituir, incluyendo comodines
# Por IMV-2011

b="s/"$1"/"$2"/g"
echo $b
shift 2
c='.temp'
for a in $*; do
echo $a
cat $a | sed "$b" > $c
cp $c $a
done
rm $c

Ahora guardar pulsado esc :wq intro.

Ahora hay que darle permisos de ejecución al fichero:

#chmod +x sustitucion_texto.sh

Ya está listo. Funciona de la siguiente manera:

#./sustitucion_texto.sh 'texto buscado' 'texto sustituto' ficheros

Los dos primeros parámetros son el texto que se busca sustituir y su sustituto. Si contienen espacios es preciso que vayan entrecomillados. En la cadena de texto buscado se pueden usar caracteres especiales que nos ayudarán adefinir mejor nuestra búsqueda, por ejemplo ^ que indica principio de línea y $ que sería final de línea.
El tercer parámetro es una expresión que nos devolverá la lista de ficheros donde hay que realizar las sustituciones. En ella se podrán usar los habituales comodines que nos ayudarán a que nos se nos escape nada nada.

Bueno, eso es todo. Espero sea de utilidad a alguien y eso, que si alguien lo amplia o cambia que me avise.

=:)

No hay comentarios:

Publicar un comentario