erb - 如何替换包含合法反斜杠的字符串(gsub)?

时间:2017-02-09 16:07:31

标签: puppet erb hiera eruby

我将erb与Puppet,Hiera和模板结合使用时出现以下问题:

通过Hiera我得到以下字符串作为变量:

首先是数组中的变量example(data [example])

something with _VARIABLE_ in it

和变量example_information with

some kind of \1 and maybe also a \2

现在我想用Puppet模板中的_VARIABLE_替换第二个包含合法反斜杠()的字符串。所以我这样做了:

result=data['example'].gsub('_VARIABLE_', @example_information)

所以我从数组中取出了example并用@example_information填充了占位符。

结果如下:

something with some kind of  and maybe also a  in it

没有反斜杠,因为gsub将它们解释为反向引用。那么如何解决我的问题以保留我的反斜杠而不必在Hiera文件中双重转义它们?我需要在代码中进一步使用Hiera变量,而不需要双重转义反斜杠。

1 个答案:

答案 0 :(得分:0)

我现在这样解决了这个具体问题如下:

再次变量example

something with _VARIABLE_ in it

和变量example_information with

some kind of \1 and maybe also a \2

模板中的代码部分:

# we need to parse out any backslashes
info_temp=example_information.gsub('\\', '__BACKSLASH__')

# now we substitute the variables with real data (but w/o backslashes)
result_temp=data['example'].gsub(/__ITEM_NAME__/, info_temp)

# now we put together the real string with backslashes again as before
result=result_temp.gsub('__BACKSLASH__', '\\')

现在结果如下:

something with some kind of \1 and maybe also a \2 in it

注意

也许有更好的方法可以做到,但在我的研究中,我没有偶然发现更好的解决方案,所以如果你知道更好的方法,请添加评论。