1

I am having a .env file like:

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

I wanted to update the SSH Key value with a new one.

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

so the regex i was using is: ssh([^"]*)

but to replace the value in the same file, I wanted to use sed.

I tried, sed -i.bak 's/ssh\([^\"]\*\)/\"$newkey\"/g' $1-where $1 is the input .env file

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

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

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

code:

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

output:

./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>"

Please help in identifying the mistake in sed(possibly?). Other suggestions to solve this problem is also welcome. I am working on a mac(10.14.5), but want to make the solution work for mac and linux both.

Thanks.

1 Answer 1

2

sed -i "s/ssh[^\"]*/$newKey/" $1 seems to work in bash for me

I think the problem with your tries is that you don't need to escape the double quotes if you're putting the substitution string in single quotes (so you'd do sed 's/ssh[^"]*/etc' without the backslash, and if you use single quotes then the variable $newkey doesn't get expanded so you'd end up with export TENANT_SSH_KEY="$newKey"

Also the brackets in your sed command aren't needed here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.