【发布时间】:2016-07-20 15:57:43
【问题描述】:
我正在使用 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* 与{、' 和\ 的不同变体,但似乎没有任何效果。我可以从那里获得一些智慧吗?
【问题讨论】:
-
\s\* 将匹配一个空格和一个 * 字面意思。 \s* 将匹配 0 到 N 个空格字符。
-
我也是这么想的。问题是,Ansible/YAML 不喜欢这种表示法:“违规行似乎是:- { regexp: "^\\$dbschema_audit\s*=", line: "$dbschema_audit=\'{{ db_schema_audit }}\ ';" } "
-
试试
regexp: "^.?dbschema_audit\s{0,}="或regexp: "^.?dbschema_audit[ \t\r\n\f\v]{0,}="