我是bash脚本的初学者,我遇到了一个问题。 我创建了文件“script.sh”,我想打开模板文件并用不同的值替换特定的属性。这是我的剧本,如果有人告诉我这是什么问题,我感激不尽。
#!/bin/bash
TEMPLATEFILE="Template.xml"
XMLDir="Results"
OUTPUTDir="Output"
TIMES=2
QUAN=50
DIST=150
OUTPUT_File="Output_"
mkdir $XMLDir
mkdir $OUTPUTDir
rm -rf $XMLDir
rm -rf $OUTPUTDir
echo $TIMES
x=1
echo ${x}
while [ $x -le $TIMES ]
do
RANDOMVAR =${Random}
outputFile=${OUTPUT_File}"_"${QUAN}"_"${RANDOMVAR}"_"${DIST}".xml"
outputText=${OUTPUT_File}"_"${QUAN}"_"${RANDOMVAR}"_"${DIST}".txt"
touch ${outputFile}
sed -e "s/$SEEDVALUE/$RANDOMVAR/"
-e "s/$EXPIREMENT/$QUAN/"
-e "s/$DISTANCE/$DIST/"
-e "s/$OUTPUTFILE/$outputText/"
< $TEMPLATEFILE > $outputFile
echo $outputFile" is generated in "$x" iteration out of "$TIMES
x=$(( $x + 1 ))
done
echo "done"
我在终端中运行文件:bash script.sh
xml文件包含很多行,但我试图更改以下内容:
<run length="0" seed_value="SEEDVALUE" />
<outputfileName name="expirement" output="OUTPUTFILE" />
<distancevalue value="DISTANCE" />
<entity number="EXPIREMENT" base_num="1">
运行脚本时,它会给我“意外的文件结束”
答案 0 :(得分:1)
sed -e“s / $ SEEDVALUE / $ RANDOMVAR /”
此命令采用变量“$ SEEDVALUE”并将其替换为“$ RANDOMVAR”,但您永远不会将SEEDVALUE设置为任何内容。您发出的实际命令如下所示:
sed -e's // $ RANDOMVAR /“
对于我的字符串替换占位符,我通常使用“把手”{{}}使它们脱颖而出。
请改为尝试:
首先确保您的模板文件包含占位符{{SEEDVALUE}}。其次,您不需要进行第一次重定向“&lt;”如果您只是将其传入,sed将对文件执行操作。
这是一个非常简化的版本,可以让事情变得更加清晰:
echo "This is some line. This is what was replaced with my placeholder: {{SEEDVALUE}}" > /tmp/testfile
RANDOMVAR="my new text"
sed -e "s/{{SEEDVALUE}}/$RANDOMVAR/" /tmp/testfile > /tmp/testfile-replaced
cat /tmp/testfile-replaced
答案 1 :(得分:0)
在我看来,那些sed命令参数不在同一行,并且换行没有被转义。尝试:
sed -e "s/$SEEDVALUE/$RANDOMVAR/" \
-e "s/$EXPIREMENT/$QUAN/" \
-e "s/$DISTANCE/$DIST/" \
-e "s/$OUTPUTFILE/$outputText/" \
< $TEMPLATEFILE > $outputFile
另外,要获得更多调试信息,使用以下代码作为解释器通常很有用:
#!/bin/bash -x
答案 2 :(得分:0)
不确定你在做什么。 我不认为定义了$ SEEDVALUE变量。
我认为你的sed命令应该更像这样
sed -e "s/seed_value=\"[0-9]*\"/seed_value=\"$RANDOMVAR\"/g"