使用awk将文件中的多个值替换为使用命令处理的值

时间:2017-03-09 19:39:37

标签: bash unix awk sed find

我知道标题有点令人困惑,但请耐心等待,因为这是我的第一篇文章。

这是我的问题大师: 我有一个文件default.yaml,我们在不同的块中为一些应用程序分配密码字段,如:

  • admin_password:xxxxxxx
  • web_endpoint:" xxxxxx:9090"
  • dbpassword:xxxxxx
  • dbusername:dbuser

想法是使用openssl来加密解密文件。 (我知道有更好的方法可以做到,但我们现在正在寻找捷径,不同的原因)

因此,当部署执行时,我需要解密文件中的密码字段,该密码字段在svn中以加密方式签入。

我是awk和sed的新手,我正在尝试不同的方法来做到这一点,但没有成功。所以这是问题陈述:

  • 文件default.yaml包含具有加密密码的密码字段。
  • 使用"密码:"
  • 查找模式
  • 在通过openssl命令运行后,在该字段中替换加密后的密码值和解密后的密码值。
  • 将解密文件提供给部署

我认为可以编写一行命令来执行此操作,但请按照您的想法提出建议。

到目前为止,我已经尝试过这个:

awk '{if (tolower($1) ~ /password\:/) 
  {''$2=system("openssl enc -aes-128-cbc -a -d -salt -pass pass:mysecretpass" $2)''}; 
  print}' default.yaml

据我所知,系统命令将返回状态,但在此查找方向。谢谢你们。

我已经使用临时文件解决了它,但我不喜欢这个解决方案。谢谢你找人。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下解决方案 -

awk 'tolower($1) ~ /password:/ {system( "echo " $1 "openssl enc -aes-128-cbc -a -d -salt -pass pass:mysecretpass" $2 )}' default.yaml
希望这有帮助。