Reemplazo masivo

¿Quién no ha querido alguna vez quitar los dichosos espacios que tenemos siempre en los mp3 que nos bajamos o que nos pasan?. Bien, pues mirando un poco de bash, y recibiendo alguna que otra ayuda y consejo, fijémonos que el siguiente script hace exactamente eso:

bash-2.05b$ for i in *.mp3; do mv "$i" `echo "$i" | tr ' ' '_'`; done

Y si ahora renombramos todas nuestras fotos (unas 100 o así) de foto01 a img01, ¿haremos la misma operación 100 veces? NO, para eso está el bash:

bash-2.05b$ for i in `ls *jpg`; do mv "$i" `echo "$i" | sed 's/foto/img/'`; done

Ahora el problema, por circunstancias ajenas se decide cambiar de proveedor de Internet, con lo que la IP también varía. De un simple vistazo podemos decudir que en cada zona de dominio tenemos (al menos) dos entradas A con la ip que quedará desfasada.

Tenemos dos opciones, editar a mano todos y cada uno de esos archivos y rezar para no equivocarnos al escribir (o copiar&pegar) la nueva IP, o hacerlo como todo geek haría:

# for i in *.hosts; do cat $i | 
sed 's/111.111.111.111/222.222.222.222/' > $i.new ;
rm $i; mv $i.new $i; done

Otra solución:

$ cd X/
$ for f in `grep -r cadena * | cut -f 1 -d :`; do cat $f | sed s/cadena/cadena2/g > /tmp/temporal.temp && mv /tmp/temporal.temp $f; done