有兩天沒有寫自己的部落格了,本來決定要每天堅持寫,看來自己有時就是太懶了,總是會找借口不寫了,今天很累明天再寫吧,結果明天也沒寫,明天我一定寫兩篇,可是最後一篇都沒寫。也許這就是人之所以的人之惰性吧,我天生可能就是有一種惰性,很多事情都不是太會去主動做,這是不好而且可能是致命的缺點,所以決定了還是應該盡量去克服這個缺點,當然如果中間我確實有幾天沒寫,如果不小心耽誤了您搜尋代碼,對不起了,您可千萬不要用磚頭來拍我,因為現在的磚頭不結實,拍死還好,拍不死可就傻了,那時鬱悶也無奈了,呵呵。
言規正傳昨天公司的mary請我幫忙想一下如何去修改一個再linux下的XML文檔,如果使用c語言,那當然可以了使用一個對搜尋位置的函數通過指標傳遞來實現,這個恐怕要好好的想一想,自己的c語言也不是那麼的好了,對記憶體操作n年了總是不能很好的解決,無奈之下女生求助,是紳士的總是要幫一把了您說對吧,所以沒有辦法了只要去試試看了,我打算使用shell指令碼去實現。
通過搜集一些資料和自己先前對一些shell指令碼的編寫,我突然想到來對XML檔案進行讀取,然後根據cut指令獲找到想要的替換,然後之行vi指令中的字串處理命令來實現。這個方法肯定行了。現在我就把代碼貼出來,共用一直是我追求的理念。共用共用。
#!/bin/sh
DIR="tvdevicedesc.xml"
CONF_DIR1="upnp_name.conf"
#cat ${CONF_DIR}
var=`cat ${DIR} | grep "<friendlyName>"`
temp=`echo $var | cut -f2 -d' '`
tt=`echo $temp | cut -f2 -d'>' | tr -d "</friendlyName>"`
echo $tt
temp2=`cat ${CONF_DIR1}`
echo $temp2
vi ${DIR} <<-!
:g/$temp/s//$temp2/g
:wq
!
這就是我寫點代碼了,這個指令碼代碼多了一些無用的東西,因為我是要再指令碼中查看是不是修改了我需要修改的字串了所以加入了前面的很多代碼其實就三句就可以實現了。
vi ${DIR} <<-!
:g/$temp/s//$temp2/g
:wq
!
前面的都是用來對結果的顯示的。當然這個shell是運行再linux下裝有vim編輯工具的,如果沒有這個工具那麼我這個指令碼就作廢了,如果您看了請注意這個地方。
下面是一個寫道公司削減核心下的linux的shell指令碼,由於削減核心中記憶體的存貯有限一般的應用軟體都沒有裝載所以我只好使用些常用的shell語言命令了,代碼如下:
#!/bin/sh
DIR="tvdevicedesc.xml"
CONF_DIR1="upnp_name.conf"
#cat ${CONF_DIR}
var=`cat ${DIR} | grep "<friendlyName>"`
temp=`echo $var | cut -f2 -d' '`
tt=`echo $temp | cut -f2 -d'>' | tr -d "</friendlyName>"`
echo $tt
temp2=`cat ${CONF_DIR1}`
echo $temp2
sed 's/'$tt'/'$temp2'/g' tvdevicedesc.xml >tvdevicedesc.xml
這裡使用到了sed指令,這個指令我從網上瞭解到好像是對流進行操作的,他的功能是比較強大的,有些參數我沒有做過嘗試,如果您做過了記得給我留言,燕過留聲 ,人過留名嘛,先謝謝了。對於這個指令碼我有點說明,可能是有於tvdevicedesc.xml 存在如果你想把修改後的在寫入tvdevicedesc.xml 檔案那麼檔案會變成空。但是如果寫成別的檔案名稱字那就沒有問題。這個可能就是對資料流操作的先後順序,因為我不是太明白,這隻是我一點點的猜想,如果您知道什麼原因我就不重複了 共用吧 呵呵