Linux江湖的三大劍客(grep、sed和awk)戰術大比拼

在Linux江湖裡面,有三大劍客:grep、sed和awk,它們分屬不同的門派,並且家學淵源,招式各異,但是,很多人對它們傻傻分不清,本文給大家區分一下。

簡單的來說,grep主要用於搜尋;sed最常用的功能是替換,而替換的最高境界是刪除,所以sed即可以用於替換也可用作刪除;awk的修為最為高深,準確的說,awk不是shell的命令,而是一門程式語言,它與shell一樣,有自己的語法規範,可以定義變數、陣列等,執行條件判斷等複雜邏輯處理。awk具備極其強大的能力,所以,它幾乎可以完成grep和sed所能完成的全部工作。

awk的武學思想最為高深,雖然它跟grep和sed的處理物件都是檔案,但是它把檔案當做資料庫來看待,以欄位為單位進行處理。在awk的眼裡,它對標的是sql。

awk是一門程式設計語,即awk程式設計語言,awk的三位建立者給它的正式定義為:樣式掃描和處理語言。awk吸收了C語言很多優秀的成分,熟悉C語言會對學習awk有很大的幫助,但awk本身不須要會使用C語言。

awk的功力太過強大,甚至有點得隴望蜀,欲與天公C語言試比高低。Unix世界有許多優秀的工具,C語言是其中最偉大的代表。不過,話說回來,在文字處理領域,C語言卻是甘拜下風。相對於C語言來說,awk完成同樣的功能要方便和簡捷得多。可以用一個命令列解決簡單的問題,而C不行,即使一個再簡單的程式,C語言也必須經過編譯、連結的全過程。再者,awk本身是解釋執行的,這就使得awk程式不必經過編譯的過程,這也使得它與shell指令碼程式能夠很好的契合。

縱觀Linux江湖,三大劍客各領風騷,唯awk功力最強,但是也是最難掌握。

備註:內容源自《趣談shell》,解密Linux江湖故事,用非線性思維學習shell,讓天下沒有難學的shell。