Sed 使用该键的环境值构建键列表
Sed construct populate list of keys with the environment value of that key
我在文件中有一个键列表:
FOO
BAR
BAZ
我正在尝试构建一个 sed 命令以将每一行替换为:
FOO=$FOO
BAR=$BAR
BAZ=$BAZ
其中右侧是具有该名称的环境变量的值。例如设置环境变量:
export FOO=1
export BAR=2
export BAZ=3
在运行 sed 之后,FILE 应该是:
FOO=1
BAR=2
BAZ=3
我试过这些:
sed -i 's/^\(.*\)$/=$/g'
sed -i "s/^\(.*\)$/=$/g"
sed -i s/^\(.*\)$/="$"/g'
还有一些其他变体。问题很明显是捕获组是如何转义的,但我不知道如何解决它。
您无法按照您尝试的方式访问 sed 中的环境变量,但使用 awk 非常简单:
awk '{ print [=10=] in ENVIRON ? [=10=]"="ENVIRON[[=10=]] : [=10=] } FILE >FILE.new \
&& mv FILE.new FILE || { echo oops; rm FILE.new; }
这可能对你有用 (GNU sed):
sed 's/.*/echo "&=$&"/e' file
在替换命令中使用匹配返回参考 &
和 e
评估标志。
我在文件中有一个键列表:
FOO
BAR
BAZ
我正在尝试构建一个 sed 命令以将每一行替换为:
FOO=$FOO
BAR=$BAR
BAZ=$BAZ
其中右侧是具有该名称的环境变量的值。例如设置环境变量:
export FOO=1
export BAR=2
export BAZ=3
在运行 sed 之后,FILE 应该是:
FOO=1
BAR=2
BAZ=3
我试过这些:
sed -i 's/^\(.*\)$/=$/g'
sed -i "s/^\(.*\)$/=$/g"
sed -i s/^\(.*\)$/="$"/g'
还有一些其他变体。问题很明显是捕获组是如何转义的,但我不知道如何解决它。
您无法按照您尝试的方式访问 sed 中的环境变量,但使用 awk 非常简单:
awk '{ print [=10=] in ENVIRON ? [=10=]"="ENVIRON[[=10=]] : [=10=] } FILE >FILE.new \
&& mv FILE.new FILE || { echo oops; rm FILE.new; }
这可能对你有用 (GNU sed):
sed 's/.*/echo "&=$&"/e' file
在替换命令中使用匹配返回参考 &
和 e
评估标志。