Replace 如何用Ansible替换文件中的字符?
对于此任务:Replace 如何用Ansible替换文件中的字符?,replace,syntax,ansible,Replace,Syntax,Ansible,对于此任务: -名称:车轮sudoers shell:sed-i-e“s/#%wheel\tALL=(全部)\tNOPASSWD:ALL/%wheel\tALL=(全部)\tNOPASSWD:ALL/g”/etc/sudoers 需要用%wheel\tALL=(全部)\tNOPASSWD:ALL替换%wheel\tALL=(全部)\tNOPASSWD:ALL 但该语法在第一个NOPASSWD:区域之后出错: X mapping values are not allowed in this co
-名称:车轮sudoers
shell:sed-i-e“s/#%wheel\tALL=(全部)\tNOPASSWD:ALL/%wheel\tALL=(全部)\tNOPASSWD:ALL/g”/etc/sudoers
需要用%wheel\tALL=(全部)\tNOPASSWD:ALL
替换%wheel\tALL=(全部)\tNOPASSWD:ALL
但该语法在第一个NOPASSWD:
区域之后出错:
X mapping values are not allowed in this context
为什么我不能使用此语法?首先:在ansible中,您不应将
shell
与sed
一起使用,而应使用模块。例如:
-name:允许不使用密码的sudo
ansible.builtin.replace:
路径:/etc/sudoers
regexp:“#%wheel\tALL=\(全部\)\t操作密码:全部”
替换:'%wheel ALL=(ALL)NOPASSWD:ALL'
查看有关如何编写正确正则表达式espc的。用于制表符(\t
)和括号。了解如何管理sudoers 第二:
您的代码无法工作,因为您没有正确引用字符串。
这应该有效(值得称赞): 同时检查是否将
\t
与sed
一起使用。使用\t
不会适用于所有版本的sed
再次强调:不要使用这个!请使用替换模块 。长话短说(一种可能的方式):shell:“sed-i-e\”s/#%wheel\\tALL=(全部)\\tNOPASSWD:ALL/%wheel\\tALL=(全部)\\tNOPASSWD:ALL/g\“/etc/sudoers”
。同时,请看下面的答案,不要使用shell
。
shell: "sed -i -e \"s/# %wheel\\tALL=(ALL)\\tNOPASSWD: ALL/%wheel\\tALL=(ALL)\\tNOPASSWD: ALL/g\" /etc/sudoers"