我有一个模板文件列表,其中包含以下格式的变量:
{{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 。