1. 程式人生 > >【OS_Linux】三大文本處理工具之sed命令

【OS_Linux】三大文本處理工具之sed命令

簡介 fonts lena 大文本 輸入文本 logs 命令總結 針對 tst

1、sed命令的簡介及用法

sed:即為流編輯器,“stream editor”的縮寫。他先將源文件讀取到臨時緩存區(也叫模式空間)中,再對滿足匹配條件的各行執行sed命令。sed命令只針對緩存區中的副本進行,不會修改或破壞源文件。默認情況下,屏幕上既會打印各行的原始內容又會打印處理後的結果。

如圖 1: sed 處理過程

技術分享圖片

sed語法:sed [選項] 匹配條件及編輯命令 輸入文本(文件)

選項:

  -n∶使用安靜(silent)模式,只打印被sed命令處理過的結果行,不打印未被sed命令處理的行。
-e∶對模式空間中的各行執行多重編輯,編輯命令的順序將影響結果。

-f∶用一個sed腳本對輸入進行編輯, -f filename指定sed腳本的文件名。
-r∶編輯條件中使用擴展的正則表達式
-i∶直接修改源文件,而不在屏幕上輸出

匹配條件:

1、采用正則表達式進行匹配(包括字符匹配、次數匹配、位置匹配)

2、行號匹配 (行號從1開始)

    beginNumber~step:從行號為beginNumber開始,每隔step步長處理一次。例如: sed -n 2~5p 含義:從第二行開始匹配,隔 5 行匹配一次,即 2,7,12.......。

     beginNumber, +N:從 beginNumber這行到往下 N 行匹配,總共匹配 N+1 行。

     beginNumber, ~N:從addr1行開始,直到行號為N的整數倍時結束。

     beginNumber, endNumber:行號為beginNumber到endNumber之間的行。

編輯命令:

命 令 說 明
i 在當前行之前插入一行
a 在當前行之後追加一行
c 用新文本覆蓋(cover)當前行
d 刪除匹配的行
g 默認只修改各行中首次匹配成功的位置,該參數意為整行搜索和替換
p 打印匹配的行
q 結束或退出 sed命令
反向匹配,即對未匹配成功的行執行sed命令
s 用一個字符串替換另一個字符串

案例:

輸入文件為ceshi.txt

技術分享圖片

選項-n的作用:

默認情況下會將未被sed命令處理的行也打印出來

技術分享圖片

有了選項-n後只打印經sed命令處理的行

技術分享圖片

刪除命令d:刪除從第三行到最後一行內容

技術分享圖片

修改命令s:在以兩位數字結尾的行後面追加.5,符號“&”表示取匹配模式。

技術分享圖片

技術分享圖片

行追加命令a:

技術分享圖片

多個sed命令組成的通道:前一個sed命令的輸出作為下一個sed命令的輸入

[email protected]:~/learn/sed$ cat test.txt 
hi,this is sed command test file
linux world is so amazing

you will LOVE it!
[email protected]-pc:~/learn/sed$ cat test.txt | sed s/linux/LINUX/ | sed s/sed/SED/
hi,this is SED command test file
LINUX world is so amazing

you will LOVE it!

2、用sed命令直接編輯源文件

法一:通過選項-i直接編輯源文件,而不是在屏幕上輸出

技術分享圖片

法二:先將sed處理的結果重定向到另外一個零時文件,再覆蓋源文件

技術分享圖片

本博文參考了:linux命令總結sed命令詳解 linux shell 腳本攻略學習19--sed命令詳解

【OS_Linux】三大文本處理工具之sed命令