問題:在介面up的時候,向乙個配置檔案中加入一些配置項,down的時候,將這些配置項從配置檔案中刪除。
ra***.temp.conf 儲存介面相關的配置項,ra***.conf是最終配置檔案。$realdevice是介面名稱。
up.sh
sed -e "s/ppp0/$realdevice/" ra***.temp.conf >> ra***.conf
down.sh
cfgnum=`wc -l ra***.temp.conf | sed 's/[[:space:]].*$//g'`
#如果grep找不到,那麼會導致指令碼阻塞
argnum_b=`grep -n $ ra***.conf | sed 's/:.*$//g'`
argnum_e=`expr $cfgnum + $argnum_b - 1`
sed -i "$argnum_b, $argnum_e"d ra***.conf
命令說明:
expr 算數計算(加減乘除)、邏輯運算(與或)、數值比較(大於小於等等)、字串計算(match/index/substr/length)。
sed 單行文字處理工具 sed [option] [[address]action] input_file
option:
-n 靜默方式,不列印sed執行過程
-f 從外部檔案讀取sed指令碼
-e 指定命令。單條命令時會自動加上,多條命令需要指定。
-i 直接修改檔案,而不是在螢幕上輸出。
-r 使用擴充套件型正規表示式。
address:
修改檔案的位置。比如指定行。
num1,num2 從第num1行到num2行。num1可以為0,表示第一行。num2為$,表示最後一行。
/expr/,可以匹配expr的行。
num1,+n,從第num1行之後的n行。
action:
a 新增。a後面可以接字串。將該字串新增到指定行。如果沒有指定address,則對所有行執行該操作。 如:sed "3a abc" ra***.conf
i 插入。i後面接字串。在指定行前面插入字串
c 取代。c後面接字串。用這個字串替換address中指定的行。
d 刪除。後面不接字串的。 如:sed "/$realdevice/"d ra***conf。$realdevice是乙個shell變數。刪除所有匹配該變數的行。
s 修改。按照正則表示,修改某一行文字。 如:sed -e "s/ppp0/$realdevice" ra***.temp.conf >> ra***.conf 。將ra***.temp.conf中的ppp0修改為$realdevice,然後附加到ra***.conf
q 退出。比如sed 2q ra***.conf,找到檔案的前兩行後退出。
p 列印
注意:
1. 如果要在sed中使用$1這樣的變數,需要使用雙引號來把命令括起來。否則單雙引號都可以用的。
2. s命令,一般使用"/"作為分隔符,但其實可以其他字元如":"作為分隔符的。這樣在對檔案路徑進行操作時會很方便,否則要進行轉義。
使用sed批量修改檔案
下午的時候遇到乙個煩事,需要將一些html中的由png改為gif。大約有20來個,如果乙個乙個改的話,真是有些煩人。該自動化的都應該讓他自動化。在思考如何指令碼化這個問題的時候,我想到這個需求有乙個關鍵點是 需要修改原檔案,而不是在管道中傳遞。請教google大神之後,再man sed一下,答案出來...
修改配置檔案啟示
修改 etc sysconfig i18n檔案 lang en us.utf 8 supported en us.utf 8 en us en sysfont latarcyrheb sun16 改為 lang zh cn.gb18030 language zh cn.gb18030 zh cn.g...
修改git config配置檔案
1.git config global add configname configvalue 解釋 給指定的級別的指定config增加乙個值 示例 git config global unset configname 只針對存在唯一值的情況 為了測試先增加乙個 刪除這個唯一值,檢視效果 查詢指定級別...