次の形式の変数を含むテンプレートファイルのリストがあります。
{{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}}になります。
答え2
なぜ次のようなものではないのですか?
echo "{{ my.other.var }}" | sed -n '/{{.*}}/{s/\./-/gp}'
結果:
{{ my-other-var }}
最初のパターンマッチングは、フォーマットに対して実行され、次のパターンが満たされると、必要なsedコマンドが実行されます(例:代替 - for)。