¿Cambiar [tr][tr]{X} a [tr][tr]{\tinyX} en una larga lista de archivos dentro de bash?

¿Cambiar [tr][tr]{X} a [tr][tr]{\tinyX} en una larga lista de archivos dentro de bash?

Novato aquí. Estoy intentando programar un script bash que reemplace, para cada archivo en una carpeta, la siguiente secuencia: [tr][tr]{X}donde X es cualquier número decimal (colección de dígitos y ".") con [tr][tr]{\tinyX}.

¿Algunas ideas?

Gracias

Respuesta1

Si no tienes acceso a GNU sed, también puedes usar perl(cuyo -iGNU sedrealmente tomó prestado):

find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +

Respuesta2

Con GNU sedusando el patrón de reemplazo global s/regexp/replacement/g:

sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*

Esto captura la cadena [tr][tr]{en un grupo y Xcontiene al menos un dígito o .(expresión entre corchetes [0-9.]\+, \+coincide con los caracteres dentro de los corchetes una o más veces) seguido del cierre }en un segundo grupo y reemplaza las partes coincidentes con el primer grupo, \tinyy la segundo grupo en cada línea. Los paréntesis ()de los grupos, los corchetes literales []y +la barra invertida literal \deben ir acompañados de otra barra invertida.

Asegúrese de hacer una copia de seguridad de su carpeta de datos antes de ejecutar esto (o utilícela -i.backen lugar de -i''para mantener los originales como filename.back).

información relacionada