sed之h H和 a N ba使用

2021-06-04 06:09:19 字數 1194 閱讀 9885

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。...