Alterar [tr][tr]{X} para [tr][tr]{\tinyX} em uma longa lista de arquivos no bash?

Alterar [tr][tr]{X} para [tr][tr]{\tinyX} em uma longa lista de arquivos no bash?

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 -iGNU sedrealmente emprestou):

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

Responder2

Com GNU sedusando 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 Xconté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, \tinye 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.backem vez de -i''para manter os originais como filename.back).

informação relacionada