Substitua cada instância de um caractere em nomes de variáveis em vários arquivos

1

Eu tenho uma lista de arquivos de modelo que contêm variáveis neste formato:

{{my.var}}
{{my.other.var}}

Eu preciso localizar cada instância e substituir o . por _ para que cada variável se torne:

{{my_var}}
{{my_other_var}}

Eu tentei fazer isso com sed e regex, mas estou tendo problemas para lidar com o fato de que as variáveis podem ter qualquer número de períodos.

Isso é o que eu tenho até agora:

for f in 'cat list-of-files.txt'; do
    sed -i .bak -E 's/{{(.*)\.(.*)}}/{{_}}/g' ${f}
done;

Quais resultados em

{{my_var}}
{{my.other_var}}
    
por Fantic 18.07.2018 / 15:51

2 respostas

-1

Por que não algo como:

echo "{{ my.other.var }}" | sed -n '/{{.*}}/{s/\./-/gp}'

resultado:

{{ my-other-var }}

Correspondência de padrões para o formato primeiro e, em seguida, execute os comandos sed necessários se esse padrão for correspondido, ou seja, substitute - for.

    
por 18.07.2018 / 16:11
1

Eu também descobri uma maneira de realizar o que eu queria com o PERL. O truque era usar modificadores preguiçosos.

perl -pi.back -e 's|\{\{(\w+?)\.(\w+?)}}|{{_}}|g' <filename>

{{my.var}} torna-se {{my_var}}

    
por 18.07.2018 / 16:37