Reemplazar texto en todos los archivos de directorios y subdirectorios

A veces queremos sustituir una cadena en todos los los archivos de un directorio y sus subdirectorios de forma recursiva. Ésto es sencillo de hacer utilizando perl. Vamos a verlo por partes:

Cuando queremos sustituir directamente una cadena por otra en un fichero, hacemos algo así:
# perl -p -i -e ‘s/cadenaasustituir/nuevacadena/g’ fichero

Si la sustitución queremos hacerla en todos los ficheros de un subdirectorio, haremos:
# perl -p -i -e ‘s/cadenaasustituir/nuevacadena/g’ *

Si queremos sustituir la cadena en todos los subdirectorios del directorio actual, combinaremos el comando perl con un comando find que busque todos los archivos:
# perl -p -i -e ‘s/cadenaasustituir/nuevacadena/g’ `find ./ -name *`

Y ya para terminar de rematar: Si queremos sustituir una cadena por otra en todos los ficheros con un determinado nombre en todos los subdirectorios del directorio actual:
# perl -p -i -e ‘s/cadenaasustituir/nuevacadena/g’ `find ./ -name “patronabuscar”`

Veamos unos ejemplos:

Sustituir la cadena jose por pepe en el fichero clientes.txt:
# perl -p -i -e ‘s/jose/pepe/g’ clientes.txt

Sustituir la cadena jose por pepe en todos los ficheros del directorio actual:
# perl -p -i -e ‘s/jose/pepe/g’ *

Sustituir la cadena jose por pepe en el directorio actual y en todos sus subdirectorios:
# perl -p -i -e ‘s/jose/pepe/g’ `find ./ -name *`

Sustituir la cadena jose por pepe en todos los ficheros con extensión .txt del directorio actual y de todos sus subdirectorios:
# perl -p -i -e ‘s/jose/pepe/g’ `find ./ -name “*.txt”`

Y un último ejemplo: Sustituir la cadena $(grub_device) por la cadena (hd0,1) en todos los ficheros con extensión .lst del directorio actual y sus subdirectorios:
# perl -p -i -e ‘s/\$\(grub_device\)/\(hd0,1\)/g’ `find ./ -name “*.lst”`

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s