dn: identifier=1
objectclass: zcvalidrecord
dsid: 2
identifier:2955
suboptionname: record
svcid: 1
zoneid: 0
dn: identifier=2
objectclass: zcvalidrecord
dsid: 2
identifier:2956
suboptionname: record
svcid: 2
zoneid: 0
要求後面的數字替換前面的數字:
dn: identifier=2955
objectclass: zcvalidrecord
dsid: 2
identifier:2955
suboptionname: record
svcid: 1
zoneid: 0
dn: identifier=2956
objectclass: zcvalidrecord
dsid: 2
identifier:2956
suboptionname: record
svcid: 2
zoneid: 0
sed ':a;n;/\n$/!;s/\([^0-9]*\)[0-9]*\(.*identifier:\)\([0-9]*\)/\1\3\2\3/' file
初一看這題覺得不難,就是簡單的數字替換,關鍵就在於數字的位置,我們都知道不管是shell還是awk還是sed,它都是逐行執行的,換句話說,執行到後面的行後,就不可能再對前面的行進行修改,這個跟我們往常的前面匹配修改後面的內容不一樣,這裡我們利用sed,把內容統一讀取後,用正則來匹配修改它。這裡還有另外兩個要點,第一,文字是以空行為段落分割,在n讀取模式中匹配空行不能再是傳統的 /^$/ ,而是 /\n$/ ,這點上特別注意,第二,針對空行觸發條件,到了檔案末尾時,沒有空行來觸發,所以要依據檔案末行來觸發替換,這裡就有了兩個標籤跳轉。sed -n '1h;/^$/!;x;s/\([^0-9]*\)[0-9]*\(.*identifier:\)\([0-9]*\)/\1\3\2\3/p' file
這是 h;h 的搭配;道理也是一樣把乙個段落讀入 hold space 裡,再出發條件統一替換。 shell指令碼之sed工具使用
執行 顯示 sed 選項 操作 引數 sed 選項 f 指令碼檔案 引數 3.3.1 p 輸出符合條件的文字 root localhost sed n p test.txt 輸出所有內容,等同於 cat test.txt 省略內容 root localhost sed n 3p test.txt 輸...
shell指令碼之sed工具使用
二 sed命令常見用法 sed 選項 操作 引數 sed 選項 f 指令碼檔案 引數選項 解釋 e或一expression 表示用指定命令或者指令碼來處理輸入的文字檔案 f或 file 表示用指定的指令碼檔案來處理輸入的文字檔案 h或 help 顯示幫助 n quiet或silent 表示僅顯示處理...
Shell命令之sed和awk
1,sed 刪除指定行。sed i d filename 2,sed 刪除多行。sed i d filename 3,sed刪除最後一行。sed i d filename 4,sed替換文字檔案中所有出現的字元。sed i s abc def g filename 將文字中所有的abc替換成def。...