跨多个文件替换变量名称中的每个字符实例

跨多个文件替换变量名称中的每个字符实例

我有一个模板文件列表,其中包含以下格式的变量:

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

相关内容