如何替换属性文件中包含路径值的参数?

时间:2013-12-12 07:27:16

标签: xml shell

我是shell脚本新手。我有一个名为 myfolder 的文件夹,其中包含一些xml文件。我还有一个属性文件,如下所述:

user=admin
password=admin

# location of xml test file
inputPath=/home/filename.xml
#reporter=XMLReporter
outputPath=/home/filename.csv
numThreads=5
reportTime=true
reportResults=true

我想替换 inputPath & outputPath 值包含我从文件夹 myfolder 中获取的文件名列表(近10个文件名)。在我的代码中,我尝试首先单独替换inputPath,如下所示:

for i in `ls myfolder/*.xml`; do 
sed -i 's/inputPath=*/inputPath=/home/$i/g' propertiesfile
done

但是我收到错误,例如:找不到命令 sed:-e表达式#1,char 29:'s'的未知选项

即使遇到同样的错误,我已将/替换为|。如何使用for循环直到所有要替换的文件名?任何人都可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 您需要使用/以外的其他正则表达式分隔符,因为您的匹配模式也有/
  2. 您需要对shell变量扩展使用双引号
  3. 你不应该解析ls命令的输出并依赖shell globing。
  4. 尝试使用此sed命令:

    for i in myfolder/*.xml; do 
        sed -i.bak "s#^\(inputPath=\).*$#$1/home/$i#" propertiesfile
    done