Заменить каждый экземпляр символа в именах переменных в нескольких файлах

У меня есть список файлов шаблонов, которые содержат переменные в этом формате:

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

Мне нужно найти каждый экземпляр и заменить . с _ так что каждая переменная становится:

 {{my_var}} {{my_other_var}} 

Я пытался сделать это с помощью sed и regex, но у меня возникли проблемы, связанные с тем фактом, что переменные могут иметь любое количество периодов.

Это то, что я до сих пор:

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

Что приводит к

 {{my_var}} {{my.other_var}} 

Почему не что-то вроде:

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

результат:

 {{ my-other-var }} 

Сначала сопоставьте шаблон для формата, а затем выполните необходимые команды sed, если этот шаблон соответствует, т.е.

Я нашел способ добиться того, чего хотел, и с помощью PERL. Хитрость заключалась в том, чтобы использовать ленивые модификаторы.

 perl -pi.back -e 's|\{\{(\w+?)\.(\w+?)}}|{{\1_\2}}|g'  

{{my.var}} становится {{my_var}}