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:表示目前行的第二列