我正在使用lineinfile,如下所示:
lineinfile dest=./hosts_exp insertafter='\[hosts1\]' line="xxxxxxxxx" state=present
我的hosts_exp
如下:
[local]
localhost
[hosts1]
[hosts2]
[hosts3]
lineinfile在[hosts3]之后插入文本,而不是在[hosts1]之后插入。
答案 0 :(得分:4)
使用:
lineinfile:
dest: "./hosts_exp"
line: "xxxxxxxxx"
insertafter: '^\[hosts1\]'
state: present
答案 1 :(得分:1)
看起来多余,但你也需要指定正则表达式:
lineinfile:
dest: ./hosts_exp
insertafter: '\[hosts1\]'
regexp: '\[hosts1\]'
line: "xxxxxxxxx"
state=present
为什么呢? regexp
说“寻找这条线”。 insertafter
说“在这里注入线”。
我测试了这个; here's the commit。我从上面的行中提交了一些小的更改,必要时使用。
答案 2 :(得分:1)
示例:
- name: "blah"
lineinfile:
dest: "/test.sh"
insertafter: 'test text'
line: "text add"
state: present
答案 3 :(得分:0)
使用backrefs:是
lineinfile:
backrefs: yes
dest: ./hosts_exp
insertafter: '\[hosts1\]'
regexp: '\[hosts1\]'
line: "xxxxxxxxx"
state=present
该标志会稍微改变模块的操作; insertbefore和insertafter将被忽略,并且如果regexp与文件中的任何地方都不匹配,则文件将保持不变。如果regexp确实匹配,则最后一个匹配的行将由扩展的line参数替换。