想要在 ansible playbook 中使用 lineinfile 在行前的文件中插入文本

Want to insert a text in a file beforealine using lineinfile in ansible playbook

我需要在文件中的参数结尾之前添加一段文字。我需要在 </abc> 之前插入我的文本。我正在使用 lineinfile,它在 <abc> 之前输入文本,而不是在 </abc>.

之前输入文本

我当前的文本文件:

<domain-log-broadcast-filter>MultiDataSourceLogFilter</domain-log-broadcast-filter>
      <abc>Info is already here. i just need to append the text at end of this parameter. new values to be inserted here</abc>

我的剧本:

  - lineinfile:
         path: /tmp/tochange.xml
         insertbefore:  '\<\/abc\>'
         line: "Tisisthelinetobeinsertedbyme"
         state: present

我的输出是:

<domain-log-broadcast-filter>MultiDataSourceLogFilter</domain-log-broadcast-filter>
Thisisthelinetobeinsertedbyme
      <abc>Info is already here. i just need to append the text at end of this parameter. new values to be inserted here</abc>

现在我有两个要求:

  1. 我想在 </abc> 之前插入我的文字
  2. 我的文件中有 4 个 </abc> 参数。我想忽略第一个 </abc> 并且该行将被插入到其他 3 </abc> 参数之前。

请给我一个最好的方法,我只需要完成这项工作,使用剧本中的任何模块和任何脚本。提前致谢。

Q: "... with any modules any script in the playbook."

答:Ansible file modules做不到。您将需要模块 commandshell 到 运行 文件编辑工具,例如 sedawk.

模块lineinfile is not able not to fulfill the requirements. This module modifies single lines in a file. It's not possible to change 3 out of 4 lines that match regexp. Neither replace nor blockinfile modules will help you either, I'm afraid. The module template modifies whole files. The next option might be the module patch

引用自lineinfile

"... For other cases, see the copy or template modules."