Как заменить строку (gsub), которая содержит законные обратные косые черты?

У меня была следующая проблема с erb в сочетании с Puppet, Hiera и шаблонами:

Через Hiera я получил следующие строки в качестве переменных:

Сначала переменная example в массиве (данные [пример])

something with _VARIABLE_ in it

и переменная example_information с

some kind of \1 and maybe also a \2

Теперь я хотел заменить _VARIABLE_ в шаблоне Puppet со второй строкой, которая содержит в себе законную обратную косую черту (). Итак, я сделал это так:

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 ответ

Теперь я сделал это, чтобы решить эту конкретную проблему следующим образом:

Переменная снова example

something with _VARIABLE_ in it

и переменная example_information с

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

Заметка

Может быть, есть лучший способ сделать это, но в моем исследовании я не наткнулся на лучшее решение, поэтому, пожалуйста, добавьте комментарии, если вы знаете лучший способ сделать это.

Другие вопросы по тегам