【发布时间】:2015-07-31 08:08:18
【问题描述】:
我有一个这样的文件(数十个变量):
PLAY="play"
APPS="/opt/play/apps"
LD_FILER="/data/mysql"
DATA_LOG="/data/log"
我需要一个脚本,它将变量输出到另一个像这样的文件中(它们之间有空格):
PLAY=${PLAY} APPS=${APPS} LD_FILER=${LD_FILER}
有可能吗?
【问题讨论】:
我有一个这样的文件(数十个变量):
PLAY="play"
APPS="/opt/play/apps"
LD_FILER="/data/mysql"
DATA_LOG="/data/log"
我需要一个脚本,它将变量输出到另一个像这样的文件中(它们之间有空格):
PLAY=${PLAY} APPS=${APPS} LD_FILER=${LD_FILER}
有可能吗?
【问题讨论】:
sed 's/"\([^"]*"\)"/={\1}/;H;$!d
x;y/\n/ /;s/.//' YourFile
您的示例不包括最后一行,所以如果这很重要
sed '/DATA_LOG=/ d
s/"\([^"]*"\)"/={\1}/;H;$!d
x;y/\n/ /;s/.//' YourFile
【讨论】:
< input sed -e 's/\(.*\)=.*/\1=${\1}/' | tr \\n \ ; echo
【讨论】:
tr \\n \ 而不是 [更具可读性] tr "\n" " "?
我会说:
$ awk -F= '{printf "%s=${%s} ", $1,$1} END {print ""}' file
PLAY=${PLAY} APPS=${APPS} LD_FILER=${LD_FILER} DATA_LOG=${DATA_LOG}
这将遍历文件并以var=${var} 格式和空格一起打印= 之前的内容。最后,它打印一个新行。
请注意,这会在行尾留下一个尾随空格。如果这很重要,我们可以检查如何改进它。
【讨论】: