我想替换XML文件中的值。示例XML
<Console>
<!-- REQUIRED PARAMETERS -->
<!-- Enter the node that you are running the installation program from. This value must be a fully qualified name, which includes a host name and domain name. For example, node001.server.name.com.-->
<node>node.sample.ibm.com</node>
<!-- Enter the domain name of the cluster as a single dot-separated string. For example, server.name.com. -->
<sso-domain-name>sample.ibm.com</sso-domain-name>
<!-- Set this property to true if your InfoSphere BigInsights Console uses HTTPS. Otherwise, enter false. -->
<https>false</https>
<!-- management-console-port specifies which port is used by the Management Console. -->
<management-console-port>8080</management-console-port>
我想取代价值。 我尝试了以下,但它不起作用。任何帮助赞赏。
sed -i "/<Console>/,/<\/Console>/ s/<node>[0-9][a-z]\+/<node>newvalue
答案 0 :(得分:8)
sed -i -e '/<Console>/,/<\/Console>/ s|<node>[0-9a-z.]\{1,\}</node>|<node>newvalue</node>|g' YourFile
我假设价值在您的标签之间,并且只包含小写字母,点和数字(基于您的样本和尝试)。如果扩展,只需在类[0-9a-z._-A-Z:]
中添加缺少的字符,也可以添加子类[:space:]
如果newvalue
是变量内容,请不要忘记使用双引号和转义字符&
,\
以及sed s
操作的分隔符(默认为{{我的代码中有1}}和/
答案 1 :(得分:5)
您可以使用xmlstarlet:
xmlstarlet ed -u //Console/node -v 'new value'
(或类似的东西)
答案 2 :(得分:2)
可以使用xml2套件轻松处理简单XML。
您可以将XML转换为基于行的格式,并按照您习惯的方式进行处理。即:
xml2 < x.xml | perl -pe 's|^(/Console/node=)(.*)$|$1newvalue|g' | 2xml > y.xml
我不太熟悉 sed 我相信你可以轻松地用 sed 替换 perl 。
答案 3 :(得分:1)
使用正确的XML解析器。例如,我将在xsh中做什么:
open 1.xml ;
for //Console/node {
if xsh:matches(., '[0-9][a-z]+') set text() 'newvalue' ;
}
save :b ;