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 ./`