sed模式空间(pattern space)和保持空间(hold space)
前面基本用法中也有提到模式空間,即為處理文件中一行內容的一個臨時緩沖區。處理完一行之后就會把模式空間中的內容打印到標準輸出,然后自動清空緩存。
而這里說的保持空間是sed中的另外一個緩沖區,此緩沖區正如其名,不會自動清空,但也不會主動把此緩沖區中的內容打印到標準輸出中。而是需要以下sed命令進行處理:
- ? ? ? 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的內容.
下面以一個例子來說明上面命令的用法,例如有一個文件,我們可以用tac命令反序打印出文件的內容,其實用sed的話也可以實現,這里先將結果列出,再詳細講解
不錯就是一行命令就可實現:
sed '1!G;h;$!d' file
通過下面的講解大家可以了解到sed的處理機制以及處理過程:
說明:
- 第一行左邊為文件內容,箭頭所指為sed當前處理的行,右側為sed命令;
- 后面三行左側綠色為模式空間內容,右側藍色為保持空間內容。
- 每次sed只讀取文件中一行到模式空間,即每次執行sed命令前,模式空間中只有文件中當前處理行內容,這一點沒有在圖中表現。
- 每一行表示一個命令處理完后兩個空間中的內容
困為每一步驟都很清楚,所以只把執行的結果以圖形表示,不做說明,可以對照前面對sed命令的說明,以加深理解
1,讀取文件的行一行"First"進行處理,最后一個命令將模式空間內容刪除,所以不會在屏幕上打印內容
2,讀取第二行“Sencond”進行處理,最后一個命令將模式空間內容刪除,所以不會在屏幕上打印內容
3,讀取第三行“three”進行處理,注意sed處理完之后會把,會把模式空間中內容打印到屏幕并自動清空模式空間(這個沒在圖中表現)
其實這個功能還可以用下面命令實現:
sed -n '1!G;h;$p' file 說明:
-n: 表示不輸出sed的處理結果,而想要輸出,則需要要顯示的用“p”命令
其實sed的高級命令還有幾個,可以分為三組,后續有機會再學習其他兩組命令:
總結
以上是生活随笔為你收集整理的sed模式空间(pattern space)和保持空间(hold space)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux文件系统和文本编辑器
- 下一篇: sed知识整理