Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sed在xml文件中追加字符串_Xml_Sed_Append - Fatal编程技术网

sed在xml文件中追加字符串

sed在xml文件中追加字符串,xml,sed,append,Xml,Sed,Append,嗨,我有一个xml文件。我想在看到标记时添加以下标记。比如说 我想补充一点 <Context allowLinking="false" privileged="false" useHttpOnly="true" xmlValidation="false"> </Context> 文件看起来像这样 <Context> </Context> <Context allowLinking="false" privileged="false"

嗨,我有一个
xml
文件。我想在看到标记时添加以下标记。比如说

我想补充一点

<Context 
allowLinking="false"
privileged="false"
useHttpOnly="true"
xmlValidation="false">
</Context>

文件看起来像这样

<Context>
</Context>
<Context allowLinking="false"
privileged="false"
useHttpOnly="true"
xmlValidation="false">
</Context>

添加后应该是这样的

<Context>
</Context>
<Context allowLinking="false"
privileged="false"
useHttpOnly="true"
xmlValidation="false">
</Context>

我使用了下面的sed命令,但无法在标记中添加参数,如上所示

我尝试了以下方法

grep 'allowLinking' /bao/tomcat/conf/context.xml
if [ $? -ne 0 ]
then    
    sed -i '/<Context .*?>/i allowLinking="false" \n privileged="false" \n useHttpOnly="true" \n xmlValidation="false"/' /tmp/context.xml
fi
grep'allowLinking'/bao/tomcat/conf/context.xml
如果[$?-ne 0]
然后
sed-i'//i allowLinking=“false”\n privileged=“false”\n useHttpOnly=“true”\n xmlvalization=“false”//tmp/context.xml
fi
你能告诉我如何添加内容吗

谢谢 Dinesh

您可以尝试:

sed -i 's/<Context *>/<Content allowLinking="false" \n privileged="false" \n useHttpOnly="true" \n xmlValidation="false">/' /tmp/context.xml

注意:迈克尔·凯在评论中指出:

[这]之所以有效,是因为你很幸运:你的数据中没有像“符号”这样的特殊字符

对于Linux
sed
,需要注意的特殊字符是
[\^$..&
,以及
-]
后面的
[
sed-E
添加了
?+{}()
,请参阅。其他
sed
可能包括更多字符

此外,如前所述,该示例不能包含单引号
'
或正斜杠
/
,除非它们由反斜杠
\
转义。请注意,
\n
用于引入换行符;此处可以使用反斜杠


最后,正如Micheal Kay所指出的,这不是sed的工作,而是sed的工作。当然,每个人都需要知道2009年的一个著名答案:。

这不是sed的工作,而是XSLT的工作。这只是因为你很幸运:数据中没有像安培和这样的特殊字符。(有趣的是,在说它有效之前,您运行了多少个测试用例?)不要在生产中使用它,否则您很快就会发现“XML”的一个消费者询问StackOverflow如何处理格式错误的“XML”数据文件。