используя sed для замены значений файла env - PullRequest
1 голос
/ 11 ноября 2019

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

Спасибо.

...