ansible regex_replace过滤正斜杠

时间:2017-12-21 15:08:46

标签: regex ansible jinja2

我尝试使用正则表达式替换过滤器,以便从开始到最后一个正斜杠提取所有字符串

来自Linux的sed正在运行:

echo /a/b/c.log |  sed 's/\(.*\)\/.*/\1/'
output: /a/b

但使用ansible:

"{{log_path | regex_replace('s/\(.*\)\/.*/\', '1/')}}"

备注:log_path是一个var,其日志完整路径如/a/b/c.log

我收到的错误如下:

  

异常:解析带引号的标量

     找到了未知的逃脱角色

我知道我可以做那样的事情:" {{log_path.split(' /')[0:-1] |加入(' /')}}"

但我更喜欢正则表达式

知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

不要将sed语法(s/pattern/replacement/)用于ansible。只需将正则表达式放入字符串即可。您也不需要转义()括号。我认为你也不需要逃避斜线。实际上,Python / ansible的PCRE与它们的前辈有很大不同。我是sed的爱好者,但是我建议你用Python开发你的正则表达式,而不是sed。

实际上,你的问题不是其中任何一个,尽管它们会使模式错误。您的问题是您正在逃避结束单一报价。很难看到,所有这些反斜杠。

这应该让你开始朝着正确的方向前进:

"{{log_path | regex_replace('(.*)/.*/', '\1')}}"

http://docs.ansible.com/ansible/latest/replace_module.html有更多的例子。