Parsing ENV with SED

Viewed 84

I have an env file

ENV=development
PORT=3000
SECRET_KEY=-----BEGIN PRIVATE KEY-----\nKEYKEYKEY\n-----END PRIVATE KEY-----\n

How can I parse this file using SED to properly format it?

Used this solution

for line in `cat ${FILE_NAME_ENV}`
do
  KEY=$(echo $line | sed 's/=.*//')
  VAL=$(echo $line | sed 's/[^=]*=//')
  echo $KEY
  echo $VAL
done

But SECRET_KEY is splitting over multiple lines due to spaces in the value

ENV
development
PORT
3000
SECRET_KEY
-----BEGIN
PRIVATE
PRIVATE
KEY-----\nKEYKEYKEY\n-----END
KEY-----\nKEYKEYKEY\n-----END
PRIVATE
PRIVATE
KEY-----\n
KEY-----\n

How can i make key value in one line?

SECRET_KEY
-----BEGIN PRIVATE KEY-----\nKEYKEYKEY\n-----END PRIVATE KEY-----\n
2 Answers

Using sed

$ sed -n 's/^\(SECRET_KEY\)=/\1\n/p' input_file
SECRET_KEY
-----BEGIN PRIVATE KEY-----\nKEYKEYKEY\n-----END PRIVATE KEY-----\n

Suggesting to enclose echo command arguments with " to contain each line as single argument to command.

Suggestion 1: fix missing "

for line in "$(cat ${FILE_NAME_ENV})"; do
  KEY=$(echo "$line" | sed 's/=.*//')
  VAL=$(echo "$line" | sed 's/[^=]*=//')
  echo "$KEY"
  echo "$VAL"
done

Output 1:

ENV
PORT
SECRET_KEY
development
3000
-----BEGIN PRIVATE KEY-----\nKEYKEYKEY\n-----END PRIVATE KEY-----\n

Suggestion 2: fix with echo -e to accept \n as newline

for line in "$(cat ${FILE_NAME_ENV})"; do
  KEY=$(echo "$line" | sed 's/=.*//')
  VAL=$(echo "$line" | sed 's/[^=]*=//')
  echo "$KEY"
  echo -e "$VAL"
done

Output 2:

ENV
PORT
SECRET_KEY
development
3000
-----BEGIN PRIVATE KEY-----
KEYKEYKEY
-----END PRIVATE KEY-----
Related