Modificación en múltiples ficheros

Aunque no es la forma de uso habitual, Perl puede ser utilizado en ``modo sed'' para modificar el texto en múltiples ficheros:

perl -e 's/nereida\.deioc\.ull\.es/miranda.deioc.ull.es/gi' -p -i.bak *.html

Este programa sustituye la palabra original (g)lobalmente e i)gnorando el ``case'') en todos los ficheros *.html y para cada uno de ellos crea una copia de seguridad *.html.bak.

Las opciones de línea de comandos significan lo siguiente:

-e
puede usarse para definir el script en la línea de comandos. Multiples -e te permiten escribir un multi-script. Cuando se usa -e, perl no busca por un fichero de script entre la lista de argumentos.

-p
hace que perl incluya un bucle alrededor de tu ``script'' al estilo sed:
while (<>) {
        ...             # your script goes here
} continue {
        print;
}
-n
Nótese que las líneas se imprimen automáticamente. Para suprimir la impresión usa la opción -n

-i[ext]
Expresa que los ficheros procesados serán modificados. Se renombra el fichero de entrada file.in a file.in.ext, abriendo el de salida con el mismo nombre del fichero de entrada file.in. Se selecciona dicho fichero como de salida por defecto para las sentencias print. Si se proporciona una extensión se hace una copia de seguridad. Si no, no se hace copia de seguridad.

En general las opciones pueden ponerse en la primera línea del ``script'', donde se indica el intérprete. Asi pues, decir

perl -p -i.bak -e "s/foo/bar/;"

es equivalente a usar el ``script'':

#!/usr/bin/perl -pi.bak
s/foo/bar/;

Casiano Rodríguez León
2009-10-04