To bit or not to bit, ingeniera en desarrollo de software, criadora de mantis, mujer transgénera
Ingeniería de software

En Linux reemplazar texto de forma recursiva

A veces queremos reemplazar un texto en varios archivos, en Linux podemos hacer esto con el comando find y la opción exec combinado con la herramienta sed:

[root@localhost ~]# find /directorio/donde/buscar -type f -name "*.xml" -exec sed -i 's/expregoriginal/textonuevo/g' {} +

En este ejemplo la herramienta find nos encuentra recursivamente sólo archivos con extensión xml, indicado por las opciones -type -f -name “*.xml” y busca ejecutar la herramienta sed, indicándolo por la opción exec.

Ahora sed es una herramienta en Linux que puede ser ejecutada independientemente pero en este caso esta obteniendo los resultados de find y agregando los archivos encontrados por medio del uso de llaves onduladas {} y el signo de + al final de la ejecución de sed, mientras que sed usa la opción i para indicar reemplazo “en su lugar”, es decir sin cambiar toda la línea o hacer respaldos, y el texto ‘s/ expregoriginal /textonuevo/g’ indica substituir (por eso la letra s) expregoriginal por textonuevo en todas las ocurrencias encontradas (por eso la letra g), lo que hay en expregoriginal es una expresión regular por lo que si sólo queremos buscar texto plano hay que fijarse en no usar caracteres especiales de expresiones regulares.

Conclusiones

Es muy útil poder reemplazar texto en varios archivos en Linux.

Como siempre si les gusta compartan y si no también, mi cuenta de Twitter @SoyTabs la reviso constantemente por si quieren hacerme comentarios o preguntas.