![¿Cambiar [tr][tr]{X} a [tr][tr]{\tinyX} en una larga lista de archivos dentro de bash?](https://rvso.com/image/164480/%C2%BFCambiar%20%5Btr%5D%5Btr%5D%7BX%7D%20a%20%5Btr%5D%5Btr%5D%7B%5CtinyX%7D%20en%20una%20larga%20lista%20de%20archivos%20dentro%20de%20bash%3F.png)
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 -i
GNU sed
realmente tomó prestado):
find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +
Respuesta2
Con GNU sed
usando 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 X
contiene 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, \tiny
y 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.back
en lugar de -i''
para mantener los originales como filename.back
).