Как заменить строку (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
Заметка
Может быть, есть лучший способ сделать это, но в моем исследовании я не наткнулся на лучшее решение, поэтому, пожалуйста, добавьте комментарии, если вы знаете лучший способ сделать это.