我的文件内容如下:
bird://localhost:${xfire.port}/${plfservice.url}
${configtool.store.folder}/config/hpctemplates.htb
我想运行一个脚本来解析所有变量以获取它们的值。让我们调用脚本resolve.sh。我想循环遍历所有匹配模式,但希望获得包含原始文件的输出,其中变量由已解析的值替换。输出示例:
bird://localhost:8043/net-littlecat-rbp.jms
/cat/dog/installation/configtool/config/hpctemplates.htb
因此,resolve.sh会在$ {}之间找到一个字符串,并且该文件的其余部分仍然是原始字符串。我怎么能得到这个?
答案 0 :(得分:0)
我无法确定如何执行awk
或sed
。但在Perl中,它就像一个魅力:
perl -ape 's/\${([^}]*)}/$ENV{$1}/g'
答案 1 :(得分:0)
读取文件并用ENV vars全局替换它,然后将其输出到包含原始文件名的文件,对吗?
这是resolve.sh:
#!/bin/bash
PORT=1234 # xfire.port
URL=abc # plfservice.url
DIR=xyz # configtool.store.folder
# subsitude with ENV vars
C=$(sed -e "s/\${xfire.port}/${PORT}/g" \
-e "s_\${plfservice.url}_${URL}_g" \
-e "s_\${configtool.store.folder}_${DIR}_g"< $1)
# original filename
F="original filename: ${1%}"
# output to file which specified by $2
cat >$2 <<END
${C}
${F}
END
致电resolve.sh:./resolve.sh <your-input-file> <your-output-file>