sed是一款流編輯工具,用來對文字進行過濾與替換操作,sed通過一次僅讀取一行內容來對某些指令進行處理後輸出,所以sed更適合於處理大資料檔案。首先,sed通過檔案或管道讀取檔案內容,但sed預設並不直接修改原始檔,而是將讀入的內容複製到緩衝區中,我們稱之為模式空間(pattern space),所有的指令操作都是在模式空間中進行的,然後sed根據相應的指令對模式空間中的內容進行處理並輸出結果,預設輸出至標準輸出(即螢幕上)。
工作流程如圖:
sed從檔案中讀取資料,如果沒有輸入檔案,則預設對標準輸入程序資料進行處理。
sed [選項]... [輸入檔案]
命令引數:
[位址]命令
d :delete 刪除,因為是刪除,所以 d 後面通常不接任何咚咚;
p :print 列印,亦即將某個選擇的資料列印出來。通常 p 會與引數 sed -n 一起執行。
s :substitute 替代,通常這個 s 的動作可以搭配正規表示法,例如 s/old/new/g ,後面的引數g: global 代表替換作用於全域性的每一行。如果沒有g,則至替換每行出現的第乙個匹配字元。
更多的指令大全如圖:
位址的匹配語法
(1)插入
(2)刪除
刪除指令需要注意以下幾點:
(1)刪除只能刪除整行,如果刪除部分需要用替換。
(2)刪除指令用於刪除匹配的行,而且刪除命令還會改變sed指令碼中命令的執行順序。因為匹配的行一旦刪除,模式空間將變為「空」,自然不會再執行sed指令碼後續的命令。刪除命令將導致讀取新的輸入行(下一行),而sed指令碼中的命令則從頭開始重新執行。
(3)列印
(4)替換
指令格式:[address]s/pattern/replacement/flags
address為操作位址,s為替換指令,/pattern/匹配需要替換的內容,/replacement為替換的新內容。
flags標記可以是:
replacement為字串,用來替換與正規表示式匹配的內容。在replace部分,只有下列字元有特殊含義:
示例 :
(5)更改
注意更改是會把整行更改,替換只會替換匹配的內容。
(6)執行多個指令
如果想要一次執行多個指令,主要有以下兩種方法:
(1)使用分號隔開使用
(2)使用-e 選項
把將樣本檔案中第二個替換為
[root@andrew andrew]# cat test.txt
first web
hello the world!
指令檔案:
[root@andrew andrew]# cat sed.sh
/body/
先匹配/body/
,然後替換成//body/,最後2 表示的是匹配該行的第二個字串.後面的指令可以用花括號括起來。
執行結果:
[root@andrew andrew]# sed -f sed.sh test.txt
first web
hello the world!
2.給每行前乙個的h1,h2等新增<>,後乙個h1,h2新增
[root@andrew andrew]# cat test.txt
first web
h1helloh1
h2helloh2
h3helloh3
指令檔案:
[root@andrew andrew]# cat sed.sh
/h[0-9]/
先匹配/h[0-9/
,然後替換成/\/1
,/\/\/2
,其中& 表示前面匹配的字串,常用於在原有字串上增加字元。
執行結果:
[root@andrew andrew]# sed -f sed.sh test.txt
first web
Linux三大文字處理工具之awk
awk也是乙個很強大的文字處理工具,與grep,sed 一起稱為linux文字處理的 三板斧 如圖,awk是逐行處理文字,將一行內容按照指定分隔符將行分割為多個字段,其中分割完後第乙個欄位為 1,第二個為 2。0表示當前處理的整行。除此之外,awk還有一些特殊的內建變數 awk option par...
Linux文字處理工具
linux中熟練的使用文字處理工具非常的重要,因為linux在設計的時候是採用一切皆檔案的哲學的,甚至連計算機中的配置也都使用偽檔案系統來表示,要查詢裡面的內容就是對檔案進行操作,所以學會使用檔案處理工具事半功倍。而在一切皆物件的windows中,因為物件封裝了所有的操作,包括顯示標準輸出的結果,使...
Linux 文字處理工具
tail f 執行tail f或tail f命令可以觀察檔案正在變化的內容 即跟蹤檔案的變化內容 檔案產生新內容時螢幕會顯示新增內容。seq n sort r head n 1 sort r命令能隨機排序。diff u file 1 file 2 file diff patch d file 1 f...