現(xiàn)在把我從網(wǎng)上看到的sed烛恤、grep和awk之間的區(qū)別列出來崎逃,希望對自己有用失尖。
grep主要用于搜索某些字符串
sed妹窖,awk?用于處理文本
grep基本是以行為單位處理文本的纬朝;而awk可以做更細分的處理,通過指定分隔符將一行(一條記錄)劃分為多個字段骄呼,以字段為單位處理文本共苛。awk中支持C語法判没,可以有分支條件判斷、循環(huán)語句等俄讹,相當于一個小型編程語言哆致。
awk功能比較多是一個編程語言了。?grep功能簡單患膛,就是一個簡單的正則表達式的匹配摊阀。?awk的功能依賴于grep。
grep可以理解為主要作用是在一個文件中查找過濾需要的內(nèi)容踪蹬。awk不是過濾查找胞此,而是文本處理工具,是把一個文件處理成你想要的格式跃捣。???AWK的功能是什么漱牵?與sed和grep很相似,awk是一種樣式掃描與處理工具疚漆。但其功能卻大大強于sed和grep酣胀。awk提供了極其強大的功能:它幾乎可以完成grep和sed所能完成的全部工作,同時娶聘,它還可以可以進行樣式裝入闻镶、流控制、數(shù)學運算符丸升、進程控制語句甚至于內(nèi)置的變量和函數(shù)铆农。它具備了一個完整的語言所應具有的幾乎所有精美特性。實際上狡耻,awk的確擁有自己的語言:awk程序設(shè)計語言墩剖,awk的三位創(chuàng)建者已將它正式定義為:樣式掃描和處理語言。??使用awk的第一個理由是基于文本的樣式掃描和處理是我們經(jīng)常做的工作夷狰,awk所做的工作有些象數(shù)據(jù)庫岭皂,但與數(shù)據(jù)庫不同的是,它處理的是文本文件沼头,這些文件沒有專門的存儲格式爷绘,普通的人們就能編輯、閱讀瘫证、理解和處理它們。而數(shù)據(jù)庫文件往往具有特殊的存儲格式庄撮,這使得它們必須用數(shù)據(jù)庫處理程序來處理它們背捌。既然這種類似于數(shù)據(jù)庫的處理工作我們經(jīng)常會遇到,我們就應當找到處理它們的簡便易行的方法洞斯,UNIX有很多這方面的工具毡庆,例如sed?坑赡、grep、sort以及find等等么抗,awk是其中十分優(yōu)秀的一種毅否。
使用awk的第二個理由是awk是一個簡單的工具,當然這是相對于其強大的功能來說的蝇刀。的確螟加,UNIX有許多優(yōu)秀的工具,例如UNIX天然的開發(fā)工具C語言及其延續(xù)C++就非常的優(yōu)秀吞琐。但相對于它們來說捆探,awk完成同樣的功能要方便和簡捷得多。這首先是因為awk提供了適應多種需要的解決方案:從解決簡單問題的awk命令行到復雜而精巧的awk程序設(shè)計語言站粟,這樣做的好處是黍图,你可以不必用復雜的方法去解決本來很簡單的問題。例如奴烙,你可以用一個命令行解決簡單的問題助被,而C不行,即使一個再簡單的程序切诀,C語言也必須經(jīng)過編寫揩环、編譯的全過程。其次趾牧,awk本身是解釋執(zhí)行的检盼,這就使得awk程序不必經(jīng)過編譯的過程,同時翘单,這也使得它與shell?script程序能夠很好的契合吨枉。最后,awk本身較C語言簡單哄芜,雖然awk吸收了C語言很多優(yōu)秀的成分貌亭,熟悉C語言會對學習awk有很大的幫助,但awk本身不須要會使用C語言——一種功能強大但需要大量時間學習才能掌握其技巧的開發(fā)工具认臊。
使用awk的第三個理由是awk是一個容易獲得的工具圃庭。與C和C++語言不同,awk只有一個文件(/bin/awk)失晴,而且?guī)缀趺總€版本的UNIX都提供各自版本的awk剧腻,你完全不必費心去想如何獲得awk。但C語言卻不是這樣涂屁,雖然C語言是UNIX天然的開發(fā)工具书在,但這個開發(fā)工具卻是單獨發(fā)行的,換言之拆又,你必須為你的UNIX版本的C語言開發(fā)工具單獨付費(當然使用D版者除外)儒旬,獲得并安裝它栏账,然后你才可以使用它。
基于以上理由栈源,再加上awk強大的功能挡爵,我們有理由說,如果你要處理與文本樣式掃描相關(guān)的工作甚垦,awk應該是你的第一選擇茶鹃。在這里有一個可遵循的一般原則:如果你用普通的shell工具或shell?script有困難的話,試試awk,如果awk仍不能解決問題制轰,則便用C語言前计,如果C語言仍然失敗,則移至C++垃杖。
Sed是一個非交互性文本流編輯器男杈。它編輯文件或標準輸入導出的文本拷貝。sed編輯器按照一次處理一行的方式來處理文件(或者輸入)并把輸出送到屏幕上调俘。你可以在vi和ex/ed編輯器里識別他的命令伶棒。sed把當前正在處理的行保存在一個臨時緩存里,這個緩存叫做模式空間彩库。一但sed完成了對模式空間里的行的處理(即對該行執(zhí)行sed命令)肤无,就把模式空間的行送到屏幕上(除非該命令要刪除該行活禁止打印)骇钦。處理完該行之后宛渐,從模式空間里刪除它,然后把下一行讀入模式空間眯搭,進行處理窥翩,并顯示。當輸入文件的最后一行處理完后鳞仙,sed終止寇蚊。通過把每一行存在一個臨時緩存里并編輯該行,初始文件不會被修改或被破壞棍好。