sed -i "s|groups['consul'][0]|hostvars['consul-1']['ansible_host']|g" `grep -rl "groups['consul'][0]" ./`
注意的是 's|||g' 语句,当要替换的内容中有单引号 ' ' 的存在则外边要用 " " 双引号括起来 否则双引号和单引号都可。"s|||g"
下面是另一个案例:
全局替换当前目录下yml文件中limits中cpu和mem,但是和requests中的cpu和mem值完全一样,要替换的变量的名字是不一样的,为了区分开limits和requests中的cpu这里采用了sed的高级用法。
n --next 下一个的意思,下面的意思就是匹配limits,然后是他的(n)下一个开始替换也就是指定了替换limits的cpu值.
sed '/limits/{n;s/cpu: "0.3"/cpu: {{ k8s_resources_limits_cpu }}/}' `grep 'cpu: "0.3"' -rl ./`
sed -i '/cpu: "{{ k8s_resources_limits_cpu }}"/{n;s/memory: 2Gi/memory: "{{ k8s_resources_limits_mem }}"/}' `grep 'cpu: "{{ k8s_resources_limits_cpu }}"' -rl ./`