【发布时间】: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