循环遍历所有匹配模式,剩下原始字符串

时间:2016-06-23 13:20:32

标签: awk sed

我的文件内容如下:

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会在$ {}之间找到一个字符串,并且该文件的其余部分仍然是原始字符串。我怎么能得到这个?

2 个答案:

答案 0 :(得分:0)

我无法确定如何执行awksed。但在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>