Remplazando cazamientos de cadenas de texto con sed

Hace un par de días, me encontré con un gran problema tenia que modificar todas las etiquetas de una función de traducción de todo un proyecto, ahora lo primero que percibir es que todos los archivos que tenia que modificar estaban con la extensión .php, y que la función que tenia que quitar, corrrespondian a una serie de acciones que sobre los registros de una BD, estaba de la forma siguientes: __(‘Accion Palabra’,true),  Entonces fue que limite el problema a sustituir todos las ocurrencias de __(‘Accion Palabra’,true) por ‘Palabra’ donde Acción y Palabra podían cambiar(solo sabia que Empezaba con Mayúsculas seguida de  minúsculas), después de pensarle un poco revisar la documentación del sed, la solucion fue:

sed -rie "s/__\('[A-Z][a-z]*\s*([A-Za-z]*)',\s*true\)/'\1'/g" $(find . -iregex ".*\.php$")

Les explico:

-r Opción expresión regular en este caso ejecute el sed como: “s/regex/sustitucion/g” donde.

s: indica que se desea sustituir.

regex: Es la expresión regular: __\(‘[A-Z][a-z]*\s*([A-Za-z]*)’,\s*true\)  con la que cazamos __(‘Accion Palabra’,true), con  [A-Z][a-z]* cazamos una cadena que inicie con Mayusculas([A-Z]) seguida de multipliples(*) minusculas([a-z]), \s* significa multiples(*) espacios(\s) en blanco.  El elemento  sustitución ‘\1’ es el primer elemento(\1) que casamos (un elemento lo cazamos con paréntesis) de la expresión regular (en este caso ([A-Za-z]*) y hacemos referencia a esta cadena con \1 posteriormente en la sustitución) al cual le agregamos las comillas simples, finalmente /g es una bandera indica que la sustitución la va a hacer de forma general(todas la veces que encuentre la cadena buscada).

-i : Le dice al grep que modifique el archivo de entrada.

-e,Permite ejecutar un comando externo, en este caso lo ocupe para llamar al find y con el buscar los archivos php :

find . -iregex ".*\.php$"

Busca los archivos que su nombre termine con  la extensión .php el (i) indica no distinguir entre mayúsculas y minúsculas, los archivos encontrados el sed los ocupa para hacer las sustituciones indicadas(se pueden agregar múltiples sustituciones al concatenarlas con el símbolo ‘;’). Finalmente solo me queda decir que:

El sed con la opción -rie no es cosa de risa!, es algo muy serio, puedes remplazar “cierto contenido” de todos los archivos en especifico de un .

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