linux三劍客sed之模式空間與保持空間
阿新 • • 發佈:2018-05-06
linux sed 三劍客 模式空間 保持空間 pattern space(模式空間) and hold space (保持空間)
(H、h、G、g、x)
模式空間:sed處理文本內容行的一個臨時緩沖區,模式空間中的內容會主動打印到標準輸出,並自動清空模式空間
(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之模式空間與保持空間