grep、sed和awk都是文本處理工具沧卢,雖然都是文本處理工具單卻都有各自的優(yōu)缺點蚁堤,一種文本處理命令是不能被另一個完全替換的,否則也不會出現(xiàn)三個文本處理命令了但狭。只不過披诗,相比較而言,sed和awk功能更強大而已立磁,且已獨立成一種語言來介紹呈队。
grep:文本過濾器,如果僅僅是過濾文本唱歧,可使用grep宪摧,其效率要比其他的高很多;
sed:Stream EDitor颅崩,流編輯器几于,默認只處理模式空間,不處理原數(shù)據(jù)沿后,如果你處理的數(shù)據(jù)是針對行進行處理的沿彭,可以使用sed;
awk:報告生成器得运,格式化以后顯示膝蜈。如果對處理的數(shù)據(jù)需要生成報告之類的信息,或者你處理的數(shù)據(jù)是按列進行處理的熔掺,最好使用awk饱搏。
grep
grep(關(guān)鍵字: 截取) 文本搜集工具, 結(jié)合正則表達式非常強大
主要參數(shù) []
-c : 只輸出匹配的行
-I : 不區(qū)分大小寫
-h : 查詢多文件時不顯示文件名
-l : 查詢多文件時, 只輸出包含匹配字符的文件名
-n : 顯示匹配的行號及行
-v : 顯示不包含匹配文本的所有行(我經(jīng)常用除去grep本身)
基本工作方式: grep 要匹配的內(nèi)容 文件名, 例如:
grep 'test' d* 顯示所有以d開頭的文件中包含test的行
grep 'test' aa bb cc 顯示在 aa bb cc 文件中包含test的行
grep '[a-z]{5}' aa 顯示所有包含字符串至少有5個連續(xù)小寫字母的串
上文已經(jīng)做出說明
http://www.cnblogs.com/-zyj/p/5760484.html
sed
sed(關(guān)鍵字: 編輯) 以行為單位的文本編輯工具 sed可以直接修改檔案, 不過一般不推薦這么做, 可以分析 standard input
基本工作方式: sed [-nef] '[動作]' [輸入文本]
a\ : 在當前行后添加一行或多行。多行時除最后一行外置逻,每行末尾需用“\”續(xù)行
c\ :用此符號后的新文本替換當前行中的文本推沸。多行時除最后一行外,每?末尾需用”"續(xù)行
i\ :在當前行之前插入文本。多行時除最后一行外鬓催,每行末尾需用”"續(xù)行刪除行
h : 把模式空間里的內(nèi)容復制到暫存緩沖區(qū)
H : 把模式空間里的內(nèi)容追加到暫存緩沖區(qū)
g : 把暫存緩沖區(qū)里的內(nèi)容復制到模式空間肺素,覆蓋原有的內(nèi)容
G: 把暫存緩沖區(qū)的內(nèi)容追加到模式空間?,追加在原有內(nèi)容的后面
l : 列出非打印字符
p : 打印行
q : 結(jié)束或退出sed
r : 從文件中讀取輸入行
! : 對所選行以外的所有行應(yīng)用命令
s : 用一個字符串替換另一個
g : 在行內(nèi)進行全局替換
w : 將所選的行寫入文件
x : 交換暫存緩沖區(qū)與模式空間的內(nèi)容
y : 將字符替換為另一字符(不能對正則表達式使用y命令)
選項
-e : 進行多項編輯宇驾,即對輸入行應(yīng)用多條sed命令時使用
-n : 取消默認的輸出
-f :指定sed腳本的文件名
示例:
awk
sed以行為單位處理文件,awk比sed強的地方在于不僅能以行為單位還能以列為單位處理文件倍靡。 awk缺省的行分隔符是換行,缺省的列分隔符是連續(xù)的空格和Tab,
但是行分隔符和列分隔符都可以自定義,比如/etc/passwd文件的每一行有干個字段,字段之間以:分隔,就可以重新定義awk的列分隔符為:并以列為單位處理這個文件。
awk實際上是一門很復雜的腳本語言,還有像C語言一樣的分支和循環(huán)結(jié)構(gòu),但是基本語法和sed類似,awk命令行的基本形式為:
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ... 和sed一樣,awk處理的文件既可以由標準輸入重定向得到,也可以當命令行參數(shù)傳入,編輯命令可以直接當命令行參數(shù)傳入,也可以用-f參數(shù)指定一個腳本文件,
編輯命令的格式為:
/pattern/{actions}
和sed類似,pattern是正則表達式,actions是一系列操作课舍。 awk程序一行一行讀出待處理文件,如果某一行與pattern匹配,或者滿足condition條件,
則執(zhí)行相應(yīng)的actions,如果一條awk命令只有actions部分,則actions作用于待處理文件的每一行塌西。
示例:
注:
$0:表示當前行
$1:表示當前行的第一列
$2:表示當前行的第二列