У меня есть файл .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.
Спасибо.