Linux Shell脚本读写XML文件

在Linux下如何用Shell脚本读写XML?现有一个config.xml

<? xml version="1.0" encoding="UTF-8" ?>
< config >
    < server-ip >192.168.1.45 </ server-ip >
    < server-port >1209 </ server-port >
    < repository-temp-path >/home/john </ repository-temp-path >
</ config >

需要修改里面的"server-ip", "server-port" and "import-path",用Shell脚本的参数$1,$2,$3来写入。

思路1:用sed实现

首先想到的就是用sed正则匹配替换实现,写了一个shell脚本,是这样的:

# !/bin/sh
if [ $ #  -ne 3 ];then
echo  " usage: argument 1:IP_Address 2:Server_PORT 3:Temp_PATH "
exit 1
fi
IP= $1
PORT= $2
DIRT= $3

echo  " Change values in config.xml... "

sed  " s/<server-ip>.*<\/server-ip>/<server-ip>${IP}<\/server-ip>/;s/<server-port>.*<\/server-port>/<server-port>${PORT}<\/server-port>/;s/<repository-temp-path>.*<\/repository-temp-path>/<repository-temp-path>${DIRT}<\/repository-temp-path>/ " config.xml > config.xml

echo  " Done. "

测试下来调用$ ./abc.sh 192.168.1.6 9909 \\/home\\/abc"是可以的,但环境变量不行,例如:$ ./abc.sh 192.168.1.6 9909 $HOME\\/abc",因为首先环境变量被解析了,所以存在反斜杠转义字符和sed替换冲突的问题。

用另外一个思路实现

另外一个思路是直接输出该xml的内容,测试下来很管用,使用很方便,不存在反斜杠转义字符的问题和环境变量的问题:

# !/bin/sh
if [ $ #  -ne 3 ];then
echo  " usage: argument 1:IP_Address 2:Server_PORT 3:Temp_PATH "
exit 1
fi
IP= $1
PORT= $2
DIRT= $3

echo  " Change values in config.xml... "

cat <<EOF >config.xml
<?xml version= " 1.0 " encoding= " UTF-8 "?>
<config>
   <server-ip> ${IP}</server-ip>
   <server-port> ${PORT}</server-port>
   <repository-temp-path> ${DIRT}</repository-temp-path>
</config>
EOF  

echo  " Done. "
思路3:用XMLStarlet

XML + shell = XMLStarlet

 

$ xmlstarlet ed -u /config/server-ip -v 192.168.1.6 -u /config/server-port -v 9909 -u /config/repository-temp-path -v /home/bbb input.xml
<?xml version= " 1.0 " encoding= " UTF-8 "?>
<config>
  <server-ip>192.168.1.6</server-ip>
  <server-port>9909</server-port>
  <repository-temp-path>/home/bbb</repository-temp-path>
</config>

思路4:用xsltproc

很多Linux比如CentOS默认已安装xsltproc,所以用xslt可以很方便的把一个xml转换为另外一个xml。具体用法见这个网页。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值