2013-08-06 70 views
0

我是bash腳本的初學者,而且我面臨一個問題。 我創建了文件「script.sh」,我想打開模板文件並用不同的值替換特定的屬性。這是我的劇本,我很感激,如果有人告訴我這是什麼問題..由sed命令在bash腳本中編輯文件

#!/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" 

我通過運行該文件在終端:慶典script.sh

的xml文件中含有大量的線,但我試圖改變如下:

<run length="0" seed_value="SEEDVALUE" /> 
<outputfileName name="expirement" output="OUTPUTFILE" /> 
<distancevalue value="DISTANCE" /> 
<entity number="EXPIREMENT" base_num="1"> 

運行腳本時,它給我「意外的文件結尾」

+0

刪除變量名稱後面的空格:'RANDOMVAR ='。否則,shell嘗試以'='作爲參數運行'RANDOMVAR'命令。 – choroba

+0

謝謝,我做了,但仍然有同樣的問題 – Yasmin

+0

它適用於我。你確定你顯示完整的代碼? – choroba

回答

1

SED -e 「S/$ SEEDVALUE/$ RANDOMVAR /」

此命令採取變量 「$ SEEDVALUE」並用「$ RANDOMVAR」取代它,但你永遠不會將SEEDVALUE設置爲任何值。實際的命令,你是發出如下所示:

SED -e「S // $ RANDOMVAR /」

對於我的字符串替換佔位符我通常讓他們通過使用「把手」鶴立雞羣{{}} 。

試試這個:

首先確保你的模板文件中包含的佔位符{{SEEDVALUE}}。其次,你不需要做的第一重定向「<」的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 
0

在我看來就像那些sed的命令參數不是在同一行線路轉移不會逃脫。嘗試:

sed -e "s/$SEEDVALUE/$RANDOMVAR/" \ 
    -e "s/$EXPIREMENT/$QUAN/" \ 
    -e "s/$DISTANCE/$DIST/" \ 
    -e "s/$OUTPUTFILE/$outputText/" \ 
    < $TEMPLATEFILE > $outputFile 

此外,爲了獲得更多的調試信息,但是這是可以使用以下的解釋:

#!/bin/bash -x 
+0

我試過也只有一個sed -e「s/$ SEEDVALUE/$ RANDOMVAR /」但是從來沒有工作 – Yasmin

0

不知道你在做什麼。 我不認爲定義了$ SEEDVALUE變量。

我覺得你的sed命令應該開始多一點這樣的

sed -e "s/seed_value=\"[0-9]*\"/seed_value=\"$RANDOMVAR\"/g" 
+0

我試過了你的解決方案,但它不起作用,你能寫一個完整的sed命令行? – Yasmin