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
没有显示错误,但命令不起作用。关于如何解决它的任何指针?
答案 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)
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