Como estoy algo enfermo y hace tiempo que no escribo porque he estado algo liado. Hoy tiro la casa por la ventana y ahí va el segundo artículo del día.

El otro día en el trabajo, necesitaba sustituir una cadena de texto en varios ficheros. Algo que no me resultó nada difícil ya que cuento con mi amiga la shell para lograrlo. Pero es un buen ejemplo para comentar la filosofía Linux y explicar la potencia de la consola bash.

Lo primero que pensé fue hacer un pequeño script como este:

touch sustituir.sh
chmod a+x sustituir.sh
vim sustituir.sh

#!/bin/bash

# Script que sustituye una cadena $1 por $2 en los ficheros indicados por $3

for i in $3
do
cat $i | sed 's/$1/$2/g' > $i.new
mv -f $i.new $i
done

exit 0

Explico un poco. Este script recibe 3 parámetros:

  • El primero $1 es la frase que se va a sustituir
  • El segundo $2 es la frase por la que se va a sustituir $1
  • El tercero $3 son los ficheros sobre los que va a hacer la sustitución.

así que a partir de ahí lo ejecute con:

./sustituir.sh /path/viejo /path/nuevo *

Este script simboliza la filosofía Unix. Pequeñas utilidades con funciones específicas que se juntan para resolver un problema. Ademaś cada una de estas utilidades es precisa en su cometido, está diseñada solamente para ello. Podéis crearos unos ficheros de texto en temporales y probarlo.

Ahora bien, Linux siempre tiene varias soluciones para lo mismo. Así que hice un pequeño:

apt-cache search replace utility

Y apareció rpl. Una aplicación que hace exactamente lo que mi script y tiene algún modificador extra que nos puede interesar.

sudo apt-get install rpl

man rpl
rpl [-LhiwbqvsRepfdt] [-xSUFFIX] 〈old_string〉 〈new_string〉 〈target_file ...〉

Aquí cada uno se quede con la solución que más le guste. Lo que queda claro es que en Linux podemos escoger.

menefante.gif meneame ico_delicious.gif del.icio

Technorati Tags: