如何在Ansible的lineinfile模块中的正则表达式中转义一个或多个空格?

时间:2016-07-20 15:57:43

标签: regex yaml ansible

我正在使用Ansible使用lineinfile模块在​​文件上设置一些变量。 我遇到的问题是如何使一个足够灵活的正则表达式在字符串的中间有一些空格。请参阅以下内容:

- name: Set DB IP in db conn file
  lineinfile: 
    dest=/path/to/db_conn
    regexp="{{ item.regexp }}"
    line="{{ item.line }}"
  with_items:
    - { regexp: "^.?dbschema_audit=",
        line: "$dbschema_audit=\'{{ db_schema_audit }}\';" }
    - { regexp: "^.?dbschema_audit_trail\s\*=",
        line: "$dbschema_audit_trail=\'{{ db_schema_audit_trail }}\';" }

我正在尝试更改的文件包含以下行:

$dbschema_audit='a';
$dbschema_audit_trail ='a';

我尝试了\s*{'\的不同变体,似乎没有任何效果。我可以从那里获得一些智慧吗?

1 个答案:

答案 0 :(得分:6)

Ansible剧本采用YAML格式。在双引号标量中,以\字符开头的字符序列是转义序列,但YAML specification表示\s不是有效的转义序列。

在双引号标量中,你必须写

"\\s"

或者,在单引号标量中,\字符没有特殊含义,因此您可以编写

'\s'