有這樣一個文件:
<?xml version="1.0" encoding="utf-8" ?> <version sver="0.1.0.36" rpcver="0.1.4.162" tilver="0.1.0.52" mpver="0.1.2.397" npcver="0.1.1.353" monver="0.1.3.697" mitmver="0.1.0.120" sklver="0.1.2.581" itmver="0.1.2.731" lver="0.1.0.120" meriver="0.1.0.94" misver="0.1.3.619" petver="0.1.0.207" lvlver="0.1.4.865" mktver="0.1.0.330" genver="0.1.2.348" fellowver="0.1.1.64" newguide="0.1.0.57" activity="0.1.0.49" fate="0.1.0.25" > </version>
因爲有新功能,現在需要追加:
refine="0.1.0.12" dailysign="0.1.0.4" stonehenge="0.1.0.2"
三行內容
說明:
因爲涉及到很多服務器,而且每個服務器的配置版本號不同,不能把他們都覆蓋成爲同一個文件。所以偷懶寫了一個腳本,批量執行。
#!/bin/bash cp versions.xml versions.xml.bak sed -i "22a refine=\"0.1.0.12\"\n dailysign=\"0.1.0.4\" \n stonehenge=\"0.1.0.2\"" versions.xml sed -i "/^refine/ s/^/ / " versions.xml /usr/bin/dos2unix versions.xml tail versions.xml
分析:
第二行的sed是在versions.xml第22下添加上述三行內容
第三行的sed是將refine的行首加兩個空格,以縮進一致
第四行是將修改後的文件格式轉換成unix格式
擴展:
其實也可以使用 \ 來轉意空格問題 上述的第二行第三行可以合併爲這樣
sed
-i
"22a \ refine=\"0.1.0.12\"\n dailysign=\"0.1.0.4\" \n stonehenge=\"0.1.0.2\""
versions.xml
執行截圖: