【问题标题】:using sed to replace env file values使用 sed 替换 env 文件值
【发布时间】:2020-03-07 10:40:34
【问题描述】:

我有一个 .env 文件,例如:

export TENANT_SSH_USER_NAME=xxxx
export TENANT_SSH_KEY="ssh-ed25519 <string of alphanumeric chars>  uname@hostname" 
export TENANT_LOAD_BALANCERS=1

我想用一个新的来更新 SSH 密钥值。

newkey=$(echo $(cat ~/.ssh/new.pub))

所以我使用的正则表达式是: ssh([^"]*)

但是要替换同一个文件中的值,我想使用 sed。

我试过了,sed -i.bak 's/ssh\([^\"]\*\)/\"$newkey\"/g' $1-$1 是输入的 .env 文件

sed -i '' -E 's/ssh\([^\"]\*\)/\"$newkey\"/g' $1

sed -i '' -E 's/ssh\([^\"]\*\)/\"$newkey\"/g' $1

sed -i '' -E 's/ssh\([^\"]\*\)/$newkey/g' $1

代码:

input_file=$1
old_key=$(grep TENANT_SSH_KEY= $input_file | cut -d '=' -f2)
echo old key...
echo $old_key

#final regex: ssh([^"]*)


newkey=$(echo $(cat ~/.ssh/new.pub))
echo new key...
echo $newkey

echo post processing...
sed -i  '' -E 's/ssh\([^\"]\*\)/$newkey/g' $1
cat $1 | grep ssh-ed25519

输出:

./ssh_key.sh myenv.env
old key...
"ssh-ed25519 <string> <uname1>@<host1>"
new key...
ssh-ed25519 <string> <uname2>@<host2>
post processing...
export TENANT_SSH_KEY="ssh-ed25519 <string> <uname1>@<host1>"

请帮助识别 sed 中的错误(可能?)。也欢迎其他解决此问题的建议。我正在使用 mac(10.14.5),但想让该解决方案同时适用于 mac 和 linux。

谢谢。

【问题讨论】:

    标签: linux bash sed environment-variables


    【解决方案1】:

    sed -i "s/ssh[^\"]*/$newKey/" $1 对我来说似乎在 bash 中工作

    我认为你尝试的问题是,如果你将替换字符串放在单引号中,你不需要转义双引号(所以你会在没有反斜杠的情况下使用 sed 's/ssh[^"]*/etc',如果你使用单引号,然后变量 $newkey 不会被扩展,所以你最终会得到 export TENANT_SSH_KEY="$newKey"

    这里也不需要 sed 命令中的括号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2020-07-01
      • 2020-01-17
      • 2022-10-21
      • 2011-11-25
      相关资源
      最近更新 更多