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"