Linux Shell指令碼讀寫XML檔案

來源:互聯網
上載者:User

在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。具體用法見這個網頁。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.