如何在Ansible Playbook中将文件空格替换为换行符?
解决Ansible replace模块替换空格为换行符失效的问题
你遇到的问题是YAML字符串转义逻辑与replace模块解析规则不匹配导致的,以下是几种可行的解决方案:
方案1:用单引号包裹替换字符串
YAML不会解析单引号内的转义字符,'\n'会直接传递给replace模块,模块会将其识别为换行符。
- name: Replace spaces with newlines replace: path: /text.txt regexp: " " replace: '\n'
方案2:用双引号并正确转义
如果习惯用双引号,需要对反斜杠做一次转义,让YAML解析后输出\n传递给模块:
- name: Replace spaces with newlines replace: path: /text.txt regexp: " " replace: "\\n"
方案3:用YAML块标量直接插入换行
利用YAML的块标符|保留换行符,直接将换行作为替换内容:
- name: Replace spaces with newlines replace: path: /text.txt regexp: " " replace: |
问题原因说明
你之前用"\n"时,YAML会把\n解析成字面量的\和n两个字符,所以替换后文件里出现的是字面量\n;尝试"\\\\n"时,YAML解析后变成\\n,模块依然无法识别为换行符——正确的双引号转义只需要两个反斜杠即可。
内容的提问来源于stack exchange,提问作者Jibun no Kage
相关产品推荐
相关产品推荐

