将所有脚本中的变量评估方法从$ VAR_NAME更改为$ {VAR_NAME}

时间:2015-12-08 05:43:52

标签: linux bash

我们有几个脚本需要将$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>

1 个答案:

答案 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'

PCRE Regex to SED