![Alterar [tr][tr]{X} para [tr][tr]{\tinyX} em uma longa lista de arquivos no bash?](https://rvso.com/image/164480/Alterar%20%5Btr%5D%5Btr%5D%7BX%7D%20para%20%5Btr%5D%5Btr%5D%7B%5CtinyX%7D%20em%20uma%20longa%20lista%20de%20arquivos%20no%20bash%3F.png)
Novato aqui. Estou tentando programar um script bash que substituirá, para cada arquivo de uma pasta, a seguinte sequência:
[tr][tr]{X}
onde X é qualquer número decimal (coleção de dígitos e ".") por
[tr][tr]{\tinyX}
.
Alguma ideia?
Obrigado
Responder1
Se você não tem acesso ao GNU sed
, você também pode usar perl
(cujo -i
GNU sed
realmente emprestou):
find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +
Responder2
Com GNU sed
usando o padrão de substituição global s/regexp/replacement/g
:
sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*
Isso captura a string [tr][tr]{
em um grupo e X
contém pelo menos um dígito ou .
(expressão de colchetes [0-9.]\+
, \+
corresponde aos caracteres dentro dos colchetes uma ou mais vezes) seguido pelo fechamento }
em um segundo grupo e substitui as partes correspondentes pelo primeiro grupo, \tiny
e o segundo grupo em cada linha. Os parênteses ()
para os grupos, os colchetes literais []
e +
a barra invertida literal \
precisam ser escapados com outra barra invertida.
Certifique-se de fazer backup de sua pasta de dados antes de executar isso (ou use -i.back
em vez de -i''
para manter os originais como filename.back
).