繁体   English   中英

linux shell:sed替换xml中的值

[英]linux shell: sed replace value in xml

我有一个xml文件,我想用另一个值替换标记<jdbcurl>中的文本值,但是有两个标记为jdbcurl的标记嵌套在不同的池ID中。

请问有人可以用SED对其进行挖掘吗? 谢谢。

<?xml version="1.0" ?>
  <WEBServer fileName="webdb.xml" name="Configuration and Security File">
  <security>
  <pool id="DEFAULT" jndiName="jdbc/webdb">
     <dbschema></dbschema>
     <userID>DBUSER</userID>
     <password>passwd1</password>
     <jdbcdriver>oracle.jdbc.driver.OracleDriver</jdbcdriver>
     <jdbcurl>jdbc:oracle:thin:@db.server.com:1753/ORCSN</jdbcurl>
  </pool>
   <pool id="bi_id" jndiName="jdbc/bidb">
    <dbschema></dbschema>
    <userID>BIUSER</userID>
    <password>passwd2</password>
    <jdbcdriver>oracle.jdbc.driver.OracleDriver</jdbcdriver>
    <jdbcurl>jdbc:oracle:thin:@db.server.com:1753/ORCSN</jdbcurl>
  </pool>
 </security>
 </WEBServer>
sed -E '/bi_id/,/pool/  s/jdbc:[^<]*/you will replace/g' filename

这将用id ='bi_id'替换池中的jdbc

sed -E '/DEFAULT/,/pool/  s/jdbc:[^<]*/you will replace/g' 

这是用于DEFAULT池的jdbcurl

使用xmlstarlet:

xmlstarlet edit --update '//WEBServer/security/pool[@id="DEFAULT"]/jdbcurl' --value 'XYZ' file.xml

输出:

<?xml version="1.0"?>
<WEBServer fileName="webdb.xml" name="Configuration and Security File">
  <security>
    <pool id="DEFAULT" jndiName="jdbc/webdb">
      <dbschema/>
      <userID>DBUSER</userID>
      <password>passwd1</password>
      <jdbcdriver>oracle.jdbc.driver.OracleDriver</jdbcdriver>
      <jdbcurl>XYZ</jdbcurl>
    </pool>
    <pool id="bi_id" jndiName="jdbc/bidb">
      <dbschema/>
      <userID>BIUSER</userID>
      <password>passwd2</password>
      <jdbcdriver>oracle.jdbc.driver.OracleDriver</jdbcdriver>
      <jdbcurl>jdbc:oracle:thin:@db.server.com:1753/ORCSN</jdbcurl>
    </pool>
  </security>
</WEBServer>

暂无
暂无

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

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