1. 程式人生 > >linux——grep、sed、awk整理及其比較

linux——grep、sed、awk整理及其比較

一、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個正好在它之前的那個字元。注意:這個元字元不是所有的軟體都支援的。

這裡寫圖片描述