我们有几个脚本需要将$VAR_NAME
的变量评估方法替换为${VAR_NAME}
这是必需的,以便脚本具有统一的变量评估方法
我正在考虑使用sed
,我编写的示例命令如下所示,
echo "\$VAR_NAME" | sed 's/^$[_a-zA-Z0-9]*/${&}/g'
输出相同的是
${$VAR_NAME}
现在我不想在$
内{}
,我该如何删除它?
有没有更好的建议来完成这项任务?
修改 以下命令有效
echo "\$VAR_NAME" | sed -r 's/\$([_a-zA-Z]+)/${\1}/g'
EDIT1
我使用以下命令在脚本文件
sed -i -r 's:\$([_a-zA-Z0-9]+):${\1}:g' <ScriptName>
答案 0 :(得分:1)
由于sed
命令的第一部分会搜索$
和VAR_NAME
,因此整个$VAR_NAME
部分将被放入${}
包装器中。
您可以在正则表达式中搜索带有lookbehind的$
部分,以便最终使用sed
结束/{&}/g
来电,因为$
将是在匹配表达式的左侧。
http://www.regular-expressions.info/lookaround.html
http://www.perlmonks.org/?node_id=518444
我认为sed
不支持这种正则表达式,但您可以创建一个以perl -pe
开头的命令。我相信以下perl命令可以做你想要的。
perl -p -e 's/(?<=\$)[_a-zA-Z0-9]*/{$&}/g'