日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed模式空间(pattern space)和保持空间(hold space)

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed模式空间(pattern space)和保持空间(hold space) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面的基本用法已經可以滿足90%的需要,人個認為想要真正掌握sed,還需要學習一下sed的高級用法,本節就詳細講解一下sed的模式空間和保持空間


前面基本用法中也有提到模式空間,即為處理文件中一行內容的一個臨時緩沖區。處理完一行之后就會把模式空間中的內容打印到標準輸出,然后自動清空緩存。

而這里說的保持空間是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的高級命令還有幾個,可以分為三組,后續有機會再學習其他兩組命令:

  • ? 處理多行模式空間(N、D、P)。
  • ? 采用保持空間來保存模式空間的內容并使它可用于后續的命令(H、h、G、g、x)。
  • ? 編寫使用分支和條件指令的腳本來更改控制流(:、b、t)。

  • 總結

    以上是生活随笔為你收集整理的sed模式空间(pattern space)和保持空间(hold space)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。