Vistas de página en total

lunes, 3 de agosto de 2009

UNIX TIP

Esta puede ser una de decenas o tal vez cientos de formas (todo depende del programador) en las que podemos encontrar cierto archivo y cambiar una cadena en particular dentro de este archivo.

Para ello me e basado en tips muy útiles que me llegan por correo del sitio http://www.ugu.com/sui/ugu/show?tip.today la verdad es que creo que mate una hormiga con una aplanadora ya que uso find, y vim, cuando podria ser posible tener un script mucho mas simple y que use por ejemplo solo awk, bueno vamos al script.

Tengo un directorio con cientos de archivos llamados "archivo_variables.js" los cuales tienen una cadena que acaba de cambiar y como ya e dicho son cientos entonces ir cambiando de a uno seria algo tardado y esta claro que es un proceso repetitivo, aqui el script:

$ find . -name variables.js -exec vim -c "%s/cadenavieja/cadenanueva/g" -c "wq" {} ";"

Excelente ya termine, lo bueno es que le dije al jefe que me iba a llevar toda la semana y ahora tengo tiempo para seguir leyendo :P jeje.

Explicando un poco el comando este se descompone en dos partes la primera que encuentra todos aquellos archivos llamados variables.js dentro del directorio actual;

$ find . -name variable.js

y como argumento adicional a find le decimos que ejecute un comando para cada archivo encontrado;

$ find . -name variable.js -exec ...

esta claro que el argumento -exec le indica que ejecute un comando el cual es;

$ find ... -exec vim -c "%s/cadenavieja/cadenanueva/g" -c "wq" {} ";"

aqui le decimos a vim que ejecute un comando [-c "%s/.../.../g" ] para el archivo dado y que seguido de ese comando ejecute este otro [ -c "wq" ] lo cual ya sabes bien es para escribir y salir del archivo, finalmente las llaves "{}" se sustituyen por cada coincidencia en la búsqueda son el argumento que find pasa al comando y el caracter ";" termina con el comando ejecutado por find.

El comando pasado a vim es tal vez el mas claro y significativo ya que es el que edita el archivo buscando la cadena a sustituir en todo lo largo del archivo, pero esto ya lo saben los amantes de sed.

Pues eso es todo claro y simple.