Linux命令将多行插入xml文件

时间:2016-01-24 12:50:23

标签: linux shell awk sed

Linux命令在match / pattern之前将多行插入xml文件。尝试使用以下命令:

#finding pattern:
toOccurance=`grep -n "\<copy file=\"${appletResource}\/images\/CCMsplash.gif\" toFile=\"${appletbuild}\/splash.gif\" \/>" abc.xml | awk -F: '{print $1}'`

toOccurance=$(($toOccurance -1 ))

sed -i "$toOccurance /a \<copy todir=\"${controlbuild\}\" flatten=\"true\">\n
                \<fileset dir=\"${appletResource}\">\n
                        \<include name=\"crop.properties\"\/>\n
                        \<include name=\"vvm.xml\"\/>\n
                        \<exclude name=\"images\/\*splash.gif\"\/> 
                <\/fileset>
        <\/copy>" abc.xml

没有显示错误,但命令不起作用。关于如何解决它的任何指针?

2 个答案:

答案 0 :(得分:0)

你的sed&#34; a&#34;命令错了。变化:

sed -i "$toOccurance /a blah blah blah....

sed -i "${toOccurance}a blah blah blah....

但是@tripleee是对的,您也可以使用sed来查找行号而不是顶部的所有业务。 但是一个工作脚本值得两个&#34;这样做会更好&#34;脚本,我想

答案 1 :(得分:-1)

在xml文件中指定匹配/模式之前更新.....

!/ bin / sh的

function updateXML(){     abcFilePath = abc.xml     echo&#34;更新文件$ abcFilePath&#34;

if [ -f $abcFilePath ];
then
    echo "File $abcFilePath exists"
else
    echo "File $abcFilePath does not exists"

dos2unix $abcFilePath
fi

    toOccurance=`grep -n '\<copy file=\"${appletResource}\/images\/CCMsplash.gif\" toFile=\"${appletbuild}\/splash.gif\" \/>' $abcFilePath | awk -F: '{print $1}'`

toOccurance=$(($toOccurance - 1 ))

echo "toOccurance =  $toOccurance"

sed -i&#34; $ {toOccurance} a \ n \ n n \\ n \ n n \ n&lt; / fileset&gt; \ n&lt; / copy&gt;&#34; $ abcFilePath

echo&#34;更新了文件&#34;

}

如updateXML