繁体   English   中英

通过sed命令在bash脚本中编辑文件

[英]Edit File in bash script by sed command

我是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">

运行脚本时,它给我“文件意外结尾”

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

在我看来,那些sed命令参数不在同一行上,并且不会发生换行。 尝试:

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

另外,要获取更多调试信息,通常使用以下内容作为解释器:

#!/bin/bash -x

不知道你在做什么。 我不认为已定义$ SEEDVALUE变量。

我认为您的sed命令应该这样开始

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM