ansible regex_替换过滤器正斜杠

ansible regex_替换过滤器正斜杠,regex,ansible,jinja2,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是一个具有日志完整路径的变量,如/a/b/c.log 我遇到了如下错误: 异常:在分析带引号的标量时 找到未知转义字符 我知道

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

这是linux与sed的合作:

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

"{{log_path | regex_replace('s/\(.*\)\/.*/\', '1/')}}"
备注:log_path是一个具有日志完整路径的变量,如/a/b/c.log

我遇到了如下错误:

异常:在分析带引号的标量时

找到未知转义字符

我知道我可以这样做:{{log_path.split('/')[0:-1]| join('/')}”

但我更喜欢正则表达式


知道我做错了什么吗?

不要将
sed
语法(
s/pattern/replacement/
)用于ansible。只需将正则表达式直接放入字符串中。您也不需要对()括号进行转义。我认为你也不需要逃避刀砍。事实上,Python/ansible的PCRE与它们的前辈有很大的不同。我喜欢sed,但我建议您用Python而不是sed开发ansible的正则表达式

事实上,你的问题不是这些,尽管它们会使模式出错。你的问题是你正在逃避结束单报价。虽然很难看到,有这么多的背部割伤

这将使您从正确的方向开始:

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

下面有更多的例子

谢谢你的回答。如果我正在处理这个问题,我会得到错误“异常:扫描双引号标量时”