ansible regex_replace过滤正斜杠

问题描述 投票:1回答:1

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

这个来自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] | join('/')}}”

但我更喜欢正则表达式

知道我做错了什么吗?

regex ansible jinja2
1个回答
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有更多的例子。

© www.soinside.com 2019 - 2024. All rights reserved.