1. 程式人生 > >linux三劍客sed之模式空間與保持空間

linux三劍客sed之模式空間與保持空間

linux sed 三劍客 模式空間 保持空間

pattern space(模式空間) and hold space (保持空間)
(H、h、G、g、x)

模式空間:sed處理文本內容行的一個臨時緩沖區,模式空間中的內容會主動打印到標準輸出,並自動清空模式空間

保持空間:sed處理文本內容行的另一個臨時緩沖區,不同的是保持空間內容不會主動清空,也不會主動打印到標準輸出,而是需要sed命令來進行處理


模式空間與保持空間的關系
模式空間:相當於流水線,文本行再模式空間中進行處理;
保持空間:相當於倉庫,在模式空間對數據進行處理時,可以把數據臨時存儲到保持空間;作為模式空間的一個輔助臨時緩沖區,但又是相互獨立,可以進行交互,命令可以尋址模式空間但是不能尋址保持空間。可以使用高級命令h,H,g,G與模式空間進行交互。

   d      Delete pattern space.  Start next cycle.
          刪除pattern space的內容,開始下一個循環

   h H    Copy/append pattern space to hold space.
          復制/追加pattern space的內容到hold space.(復制會覆蓋原內容)

   g G    Copy/append hold space to pattern space.
          復制/追加hold space的內容到pattern space.復制會覆蓋原內容)

   x      Exchange the contents of the  hold  and  pattern
          spaces.
          交換hold space和pattern space的內容.

下面使用一個實例來驗證模式空間和保持空間的關系,以及理解高級命令h,H,g,G的作用

[root@localhost tmp]# cat >> num.txt <<EOF
> One
> Two
> Three
> EOF
[root@localhost tmp]# cat num.txt     
One
Two
Three
[root@localhost tmp]# 
[root@localhost tmp]# tac num.txt 
Three
Two
One
[root@localhost tmp]# 

使用sed來將num.txt文本的內容按照倒敘輸出

實現的命令如下:

[root@localhost tmp]# sed ‘1!G;h;$!d‘ num.txt 
Three
Two
One
[root@localhost tmp]# 

註釋:1!G:第一行不執行G命令
$!d:最後一行不執行d命令,即不刪除模式空間一行

原理圖:

技術分享圖片


總結模式空間與保持空間關系
保持空間是模式空間一個臨時存放數據的緩沖區,協助模式空間進行數據處理

linux三劍客sed之模式空間與保持空間