sed高級使用學習更新中。。。。。

 
原始文件:
# cat a.a  | cat -n
     1  1111111
     2  2222222
     3  test33333
     4  444444444444
     5  555555555555

G的用法:  追加保留空間內容到模式空間
另外g的用法:複製保留空間的內容到模式空間
  # sed 'G' a.a  | cat -n
     1  1111111
     2
     3  2222222
     4
     5  test33333
     6
     7  444444444444
     8
     9  555555555555
    10
解釋:保留空間初始爲空。模式空間讀取第一行,保留空間將內容追加到模式空間去,就添加了一個空行;模式空間再讀取第二行,保留空間將內容追加到模式空間中讀取的第二行下面,依次類推。
 
p的用法: 把模式空間複製到標準輸出
# sed 'G;p' a.a  | cat -n
     1  1111111
     2
     3  1111111
     4
     5  2222222
     6
     7  2222222
     8
     9  test33333
    10
    11  test33333
    12
    13  444444444444
    14
    15  444444444444
    16
    17  555555555555
    18
    19  555555555555
    20
解釋:結合G,更好的理解下G的空間利用。
     模式空間初始爲11111 ;執行G後,保留空間內容爲空追加到模式空間1111下面 ,模式空間爲2行,111111 和 保留空間的空行;輸出 ;接着執行p ,將模式空間的2行再輸出一遍。依次類推。
 
N的用法:讀取新的輸入行,將內容追加到模式空間去,開闢多行模式空間。n一次性讀取模式空間,然後再讀取下一行。
# sed 'N;p' a.a  
1111111
2222222
1111111
2222222
test33333
444444444444
test33333
444444444444
555555555555
解釋:模式空間初始內容爲11111111。執行N 後,讀取22222222,並追加到模式空間111111下,模式空間就有11111111 和 2222222222;輸出 ;執行p,再打印一遍模式空間。
 
D的用法: 個人理解爲 刪除模式空間新加入行前面的換行符之前的內容
# sed '$!N;$!D' a.a
444444444444
555555555555
解釋:模式空間初始讀取第一行111111;$!N 是非末行,將其添加到模式空間,第二行匹配,讀取222222 ;$!D 是非末行,刪除前面的內容,就將11111111刪除,此時模式空間只有2222222了;一次讀取第3、4行。當讀取第4行,執行完條件後,模塊空間只剩444444 ;最後一行,不匹配,保留,最後只剩下4和5行。
 
h的用法:將模式空間的內容複製到保持空間中去
另外H:將模式空間的內容追加到保持空間去
# sed '1!G;h;$!d' a.a 
555555555555
444444444444
test33333
2222222
1111111
解釋: 模式空間起初爲11111111 ;1!G,除第一行,其他行執行G,此時模式空間讀入第二行;執行h,將22222和11111 複製到保持空間中 ;執行$!d,就是清除模式空間。接着讀入第3行;執行1!G,將保留空間的內容追加到模式空間,現在模式空間爲3333\n22222\n111111;執行h,將模式空間內容再複製到保持空間;執行$!d,清空保留空間。一次類推。
到讀入第5行,將保留空間的內容追加到模式空間中去,模式空間爲5555\n ...\n11111 ; 是最後一行,不匹配$!d,不執行。
 
x的用法:交換保持空間和模式空間的內容
# sed 'x;$!N;x' a.a
1111111
test33333
555555555555
解釋:模式空間初始爲11111;執行x,模式空間爲空,保持空間爲11111;執行$!N,讀入22222;執行x,模式空間爲111111,保持空間爲22222;第一輪執行完畢,打印111。模式空間載入3333;執行x,模式空間爲222222,保持空間爲3333333;執行$!N,讀入444444,模式空間爲2222\n444444 ,保持空間不變;執行x,模式空間變爲33333,保持空間變爲2222\n4444;第二輪執行完畢,打印33333。模式空間載入5555555;執行x,模式空間爲2222\n4444,保持空間爲555555;$!N不匹配;執行x,模式空間爲5555,保持空間爲222\n444.
 
 
###########################
# cat a.a
1
2
3
4
5
6
7
1、打印基數行
# sed  -n  '1~2p'   a.a     從第一行開始,步數爲2
1
3
5
7
2、打印偶數行
# sed  -n  '2~2p'  a.a    從第二行開始,步數爲2
2
4
6
擴展:sed -n '2~3p' a.a  /     sed  -n '3~3p'  a.a
 
# cat a.a
1111111
2222222
test33333
444444444444
555555555555
# sed -n '1,+2p' a.a   \\打印從第1行開始,到"1+2"結束
1111111
2222222
test33333
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章