linux——grep、sed、awk整理及其比較
阿新 • • 發佈:2019-02-14
一、grep、sed、awk 概述
grep:文字過濾器,如果僅僅是過濾文字,可使用grep,其效率要比其他的高很多
sed:Stream EDitor,流編輯器,預設只處理模式空間,不處理原資料,如果你處理的資料是針對行進行處理的,可以使用sed
awk:報告生成器,格式化以後顯示。如果對處理的資料需要生成報告之類的資訊,或者你處理的資料是按列進行處理的,最好使用awk
grep
Linux系統中grep命令是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全域性正則表示式版本,它的使用許可權是所有使用者。
sed
sed 是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。
awk
awk是一個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。
awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk是 AWK的 GNU版本
二、正則表示式基礎
最簡單的情況下,一個正則表示式看著就是一個普通的查詢串。例如,正則表示式”file”中沒有包含任何元字元,它可以匹配”file”和”file1”等字串,但是不能匹配”File”。
要想真正的用好正則表示式,正確的理解元字元是最重要的事情。下表列出了常用元字元和對它們的一個簡短的描述。
元字元 | 描述 |
---|---|
. | 匹配任何單個字元。如:r.t 可以匹配 rot、rpt 等,但不能匹配 root |
^ | 匹配一行的開始。如:^you 可以匹配 “you should believe you can” 的開始,但不能匹配 “your firend believe you can” |
$ | 匹配行結束符。如:bash$,可以匹配末尾是 bash 的字串,不能匹配末尾是 bash. 的字串 |
* | 匹配0或多個正好在它之前的那個字元。例如正則表示式 .* 意味著能夠匹配任意數量的任何字元 |
\ | 這是轉譯符,用來將後面所跟的元字元當作普通的字元來進行匹配 |
[ ]、[c1-c2]、[^c1-c2] | 匹配括號中的任何一個字元。可以在括號中使用連字元-來指定字元的區間;還可以制定多個區間;另一個重要的用法是“排除”,要想匹配除了指定區間之外的字元——在左邊的括號和第一個字元之間使用^字元。 |
| | 將兩個匹配條件進行邏輯“或”(or)運算。注意:這個元字元不是所有的軟體都支援的。 |
+ | 匹配1或多個正好在它之前的那個字元。注意:這個元字元不是所有的軟體都支援的。 |
? | 匹配0或1個正好在它之前的那個字元。注意:這個元字元不是所有的軟體都支援的。 |