Mun*_*ody 2 command-line bash sed text-processing ansible
我正在尝试用于在库存文件中sed查找和加密ansible_password字段并使用ansible-vault命令对其进行加密。但是ansible-command没有抛出sed错误,因为简单的回声工作正常。
sed -n "s/\( *\)\(ansible_password\: *\)\"\(.*\)\"/$(echo \\3)/p" sample.yml
Run Code Online (Sandbox Code Playgroud)
输出没有双引号的属性值。
该ansible-vault命令:
sed -n "s/\( *\)\(ansible_password\: *\)\"\(.*\)\"/$(ansible-vault encrypt_string --vault-password-file ~/password.txt --name 'ansible_password' '\\3')/p" sample.yml
Run Code Online (Sandbox Code Playgroud)
正在抛出错误消息: sed: -e expression #1, char 67: unterminated ``s' command
这是发生替换的行:
ansible_password: "somepassword"
Run Code Online (Sandbox Code Playgroud)
这是行不通的。嵌套命令将首先运行。echo偶然工作,因为它会\3作为替换模式,在这种情况下恰好是您想要的(= 输出原始值)。
不知道你到底想要什么,也许你可以尝试grep和xargs:
grep -Po 'ansible_password: \K"[^"]*' sample.yaml \
| xargs -n1 ansible-vault encrypt_string --vault-password-file ~/password.txt --name 'ansible_password'
Run Code Online (Sandbox Code Playgroud)
但是,您可能希望使用适当的yaml解析器而不是grep或 sed。
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |