Parsing ENV with SED



我有一个env文件

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

我如何使用SED解析该文件以正确格式化它?

使用此解决方案

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

但是由于值

中的空格,SECRET_KEY被分割为多行
ENV
development
PORT
3000
SECRET_KEY
-----BEGIN
PRIVATE
PRIVATE
KEY-----nKEYKEYKEYn-----END
KEY-----nKEYKEYKEYn-----END
PRIVATE
PRIVATE
KEY-----n
KEY-----n

如何使键值在一行?

SECRET_KEY
-----BEGIN PRIVATE KEY-----nKEYKEYKEYn-----END PRIVATE KEY-----n

使用sed

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

建议将echo命令参数用"括起来,将每行作为命令的单个参数。

建议1:修复缺失的"

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

ENV
PORT
SECRET_KEY
development
3000
-----BEGIN PRIVATE KEY-----nKEYKEYKEYn-----END PRIVATE KEY-----n

建议2:修复echo -e接受n作为换行

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

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

最新更新