複数のファイルで変数名のすべての文字インスタンスを置き換えます。

複数のファイルで変数名のすべての文字インスタンスを置き換えます。

次の形式の変数を含むテンプレートファイルのリストがあります。

{{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}}

ベストアンサー1

また、PERLを使って欲しいものを達成する方法を見つけました。秘訣は、怠惰な修飾子を使用することです。

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

{{my.var}}は{{my_var}}になります。

おすすめ記事