想要在 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>
现在我有两个要求:
- 我想在
</abc>
之前插入我的文字
- 我的文件中有 4 个
</abc>
参数。我想忽略第一个 </abc>
并且该行将被插入到其他 3 </abc>
参数之前。
请给我一个最好的方法,我只需要完成这项工作,使用剧本中的任何模块和任何脚本。提前致谢。
Q: "... with any modules any script in the playbook."
答:Ansible file modules做不到。您将需要模块 command 或 shell 到 运行 文件编辑工具,例如 sed 或 awk.
模块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."
我需要在文件中的参数结尾之前添加一段文字。我需要在 </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>
现在我有两个要求:
- 我想在
</abc>
之前插入我的文字 - 我的文件中有 4 个
</abc>
参数。我想忽略第一个</abc>
并且该行将被插入到其他 3</abc>
参数之前。
请给我一个最好的方法,我只需要完成这项工作,使用剧本中的任何模块和任何脚本。提前致谢。
Q: "... with any modules any script in the playbook."
答:Ansible file modules做不到。您将需要模块 command 或 shell 到 运行 文件编辑工具,例如 sed 或 awk.
模块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."