Linux文字處理三劍客之sed

2021-09-04 05:26:58 字數 3212 閱讀 6479

1.sed簡介

sed是文字處理命令,因為其強大的功能而可稱之為一種資料流編輯器。sed

對文字的處理很強大,並且sed非常小,引數少,容易掌握,他的操作方式根awk

有點像。sed 一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,

稱為「模式空間」pattern space),接著用sed命令處理緩衝區中的內容,處理完

成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。

檔案內容並沒有 改變,除非你使用重定向儲存輸出。sed主要用來自動編輯乙個或

多個檔案;簡化對檔案的反覆操作;簡單的將,sed可以對文進中的每一行內容進

行增刪改查等操作。

2. 定址

可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩

個行數表示以這兩行為起止的行的範圍(包括行數表示的那兩行)。如1,3表示1

,2,3行,美元符號($)表示最後一行。範圍可以通過資料,正規表示式或者二者

結合的方式確定 。

3.常用選項:

-n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 stdin的資料一般

都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那

一行(或者動作)才會被列出來。

-e∶允許在同一行裡執行多條命令。

-f∶直接將 sed 的動作寫在乙個檔案內, -f filename 則可以執行 filename 內

的sed 動作;

-r∶sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)

-i∶直接修改讀取的檔案內容,而不是由螢幕輸出。

4.常用命令:

a   ∶新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)

c   ∶取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!

d   ∶刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;

i   ∶插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)

p  ∶列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起運作~

s  ∶取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示

法!例如 1,20s/old/new/g 就是啦!

5. 元字符集

^  錨定行的開始 如:/^sed/匹配所有以sed開頭的行。  

$  錨定行的結束 如:/sed$/匹配所有以sed結尾的行。  

.  匹配乙個非換行符的字元 如:/s.d/匹配s後接乙個任意字元,然後是d。  

*  匹配零或多個字元 如:/*sed/匹配所有模板是乙個或多個空格後緊跟sed的行。  

匹配乙個指定範圍內的字元,如/[ss]ed/匹配sed和sed。  

[^] 匹配乙個不在指定範圍內的字元,如:/[^a-rt-z]ed/匹配不包含a-r和t-z

的乙個字母開頭,緊跟ed的行。  

\(..\) 儲存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers。  

& 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**。  

\<  錨定單詞的開始,如:/\  錨定單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。  

x\  重複字元x,m次,如:/0\/匹配包含5個o的行。  

x\  重複字元x,至少m次,如:/o\/匹配至少有5個o的行。  

x\  重複字元x,至少m次,不多於n次,如:/o\/匹配5--10個o

的行。  

6.例1

$ sed -e '/test/h' -e '$g example-----在sed處理檔案的時候,每一行都被儲存在乙個叫模式空間的臨時緩衝區中,

除非行被刪除或者輸出被取消,否則所有被處理的行都將 列印在螢幕上。接著模

式空間被清空,並存入新的一行等待處理。在這個例子裡,匹配test的行被找到

後,將存入模式空間,h命令將其複製並存入乙個稱為保 持快取區的特殊緩衝區

內。第二條語句的意思是,當到達最後一行後,g命令取出保持緩衝區的行,然

後把它放回模式空間中,且追加到現在已經存在於模式空間中 的行的末尾。在這    

個例子中就是追加到最後一行。簡單來說,任何包含test的行都被複製並追加到

該檔案的末尾。  

$   sed -i '/匹配字串/s/替換源字串/替換目標字串/g' filename

例2舉例:(假設我們有一檔名為ab)

刪除某行

[root@localhost ruby] # sed '1d' ab              #刪除第一行

[root@localhost ruby] # sed '$d' ab              #刪除最後一行

[root@localhost ruby] # sed '1,2d' ab           #刪除第一行到第二行

[root@localhost ruby] # sed '2,$d' ab           #刪除第二行到最後一行

顯示某行

.    [root@localhost ruby] # sed -n '1p' ab           #顯示第一行

[root@localhost ruby] # sed -n '$p' ab           #顯示最後一行

[root@localhost ruby] # sed -n '1,2p' ab        #顯示第一行到第二行

[root@localhost ruby] # sed -n '2,$p' ab        #顯示第二行到最後一行

使用模式進行查詢

[root@localhost ruby] # sed -n '/ruby/p' ab    #查詢包括關鍵字ruby所

在所有行

[root@localhost ruby] # sed -n '/\$/p' ab        #查詢包括關鍵字$所在所

有行,使用反斜線\遮蔽特殊含義

Linux文字處理三劍客

grep 作用 文字搜尋工具,根據使用者指定的 模式對目標檔案逐步進行匹配檢查,列印匹配到的行 grep root etc passwd grep命令選項 grep user etc passwd v 顯示不被pattern 匹配的行 e 僅顯示匹配到的字串 grep user etc passwd...

linux文字處理三劍客

常用引數 v 顯示不能夠被匹配到的行 i 忽略大小寫字元 o 僅顯示匹配到的字串 q 靜默模式,不輸出任何資訊 a 後 行 b 前 行 c 前後各 行 e 使用ere,相當於egrep常用引數 n 只列印模式匹配的行 e 直接在命令列模式上進行sed動作編輯,此為預設選項 f 將sed的動作寫在乙個...

文字處理三劍客

文字處理三劍客 劍客一 grep 作用 行 過濾 用法 grep 正規表示式 檔案 路徑 grep e 擴充套件類正規表示式 檔案 路徑 劍客二 sed 用法 sed 選項 位址定位sed命令 檔案 路徑 sed 選項 正規表示式 sed命令 檔案 路徑 sed 選項 位址定位 正規表示式 sed命...