【发布时间】:2022-01-01 02:09:31
【问题描述】:
我有一个文件中的键列表:
FOO
BAR
BAZ
我正在尝试构建一个 sed 命令来替换每一行:
FOO=$FOO
BAR=$BAR
BAZ=$BAZ
右侧是具有该名称的环境变量的值。比如设置环境变量:
export FOO=1
export BAR=2
export BAZ=3
运行 sed 后,文件应该是:
FOO=1
BAR=2
BAZ=3
我试过这些:
sed -i 's/^\(.*\)$/\1=$\1/g'sed -i "s/^\(.*\)$/\1=$\1/g"sed -i s/^\(.*\)$/\1="$\1"/g'
还有其他一些变化。问题显然在于捕获组是如何逃脱的,但我不知道如何解决。
【问题讨论】:
-
它是否必须被sed?使用 awk。或者python。
-
不,它没有,awk 很好。我宁愿不使用python。
-
那就用python,很快就搞定了。字面意思是
python -c 'for line in sys.stdin: print(line "=" os.getenv(line)); -
The issue is clearly in how the capture group is escaped怎么清楚? Sed 适用于 text,它不会将$anything序列替换为值。 -
'显然'因为捕获有效,添加
=有效,只是将变量从 $NAME 扩展到 VALUE 不起作用。