天天看點

Linux 三劍客grep,sed,awk

grep、sed和awk都是文本處理工具,雖然都是文本處理工具單卻都有各自的優缺點,一種文本處理指令是不能被另一個完全替換的,否則也不會出現三個文本處理指令了。隻不過,相比較而言,sed和awk功能更強大而已,且已獨立成一種語言來介紹。

grep:文本過濾器,如果僅僅是過濾文本,可使用grep,其效率要比其他的高很多;

sed:Stream EDitor,流編輯器,預設隻處理模式空間,不處理原資料,如果你處理的資料是針對行進行處理的,可以使用sed;

awk:報告生成器,格式化以後顯示。如果對處理的資料需要生成報告之類的資訊,或者你處理的資料是按列進行處理的,最好使用awk。

grep

grep(關鍵字: 截取) 文本搜集工具, 結合正規表達式非常強大

主要參數 []

-c : 隻輸出比對的行

-I : 不區分大小寫

-h : 查詢多檔案時不顯示檔案名

-l : 查詢多檔案時, 隻輸出包含比對字元的檔案名

-n : 顯示比對的行号及行

-v : 顯示不包含比對文本的所有行(我經常用除去grep本身)

基本工作方式: grep 要比對的内容 檔案名, 例如:

grep ‘test’ d* 顯示所有以d開頭的檔案中包含test的行

grep ‘test’ aa bb cc 顯示在 aa bb cc 檔案中包含test的行

grep ‘[a-z]{5}’ aa 顯示所有包含字元串至少有5個連續小寫字母的串

上文已經做出說明

http://www.cnblogs.com/-zyj/p/5760484.html
           

sed

sed(關鍵字: 編輯) 以行為機關的文本編輯工具 sed可以直接修改檔案, 不過一般不推薦這麼做, 可以分析 standard input

基本工作方式: sed [-nef] ‘[動作]’ [輸入文本]

a\ : 在目前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行

   c\ :用此符号後的新文本替換目前行中的文本。多行時除最後一行外,每⾏末尾需用”"續行

    i\ :在目前行之前插入文本。多行時除最後一行外,每行末尾需用”"續行删除行

   h : 把模式空間裡的内容複制到暫存緩沖區

   H : 把模式空間裡的内容追加到暫存緩沖區

   g : 把暫存緩沖區裡的内容複制到模式空間,覆寫原有的内容

   G: 把暫存緩沖區的内容追加到模式空間⾥,追加在原有内容的後面

   l : 列出非列印字元

   p : 列印行

   q : 結束或退出sed

   r : 從檔案中讀取輸入行

   ! : 對所選行以外的所有行應用指令

    s : 用一個字元串替換另一個

    g : 在行内進行全局替換

  w : 将所選的行寫入檔案

   x : 交換暫存緩沖區與模式空間的内容

    y : 将字元替換為另一字元(不能對正規表達式使用y指令)

選項

  -e : 進行多項編輯,即對輸入行應用多條sed指令時使用

  -n : 取消預設的輸出

  -f :指定sed腳本的檔案名

示例:

awk

sed以行為機關處理檔案,awk比sed強的地方在于不僅能以行為機關還能以列為機關處理檔案。 awk預設的行分隔符是換行,預設的列分隔符是連續的空格和Tab,

但是行分隔符和列分隔符都可以自定義,比如/etc/passwd檔案的每一行有幹個字段,字段之間以:分隔,就可以重新定義awk的列分隔符為:并以列為機關處理這個檔案。

awk實際上是一門很複雜的腳本語言,還有像C語言一樣的分支和循環結構,但是基本文法和sed類似,awk指令行的基本形式為:

awk option ‘script’ file1 file2 …

awk option -f scriptfile file1 file2 …

  和sed一樣,awk處理的檔案既可以由标準輸入重定向得到,也可以當指令行參數傳入,編輯指令可以直接當指令行參數傳入,也可以用-f參數指定一個腳本檔案,

編輯指令的格式為:

/pattern/{actions}

和sed類似,pattern是正規表達式,actions是一系列操作。 awk程式一行一行讀出待處理檔案,如果某一行與pattern比對,或者滿足condition條件,

則執行相應的actions,如果一條awk指令隻有actions部分,則actions作用于待處理檔案的每一行。

示例:

注:

$0:表示目前行

$1:表示目前行的第一列

$2:表示目前行的第二列

繼續閱讀