文本處理三劍客(grep,sed,awk)
Linux文本處理三劍客:
grep:文本過(guò)濾工具
grep ?egrep=grep -e ?fgrep
sed:流編輯器 ?處理多個(gè)行
awk:文本編輯工具,格式化工具
grep?[OPTIONS] PATTERN [FILE…] :
文本處理搜索工具,根據(jù)用戶指定的“模式”對(duì)目標(biāo)文本進(jìn)行匹配檢查;打印匹配到的行
選項(xiàng):
- –color=auto: 對(duì)匹配到的文本著色顯示
- -v: 顯示不被pattern匹配到的行
- -i: 忽略字符大小寫(xiě)
- -n: 顯示匹配的行號(hào)
- -c: 統(tǒng)計(jì)匹配的行數(shù)
- -o: 僅顯示匹配到的字符串
- -q: 靜默模式,不輸出任何信息
- -A #: after, 顯示匹配到的行和后#行
- -B #: before, 顯示匹配到的行和前#行
- -C #:context, 顯示匹配到的行和前后各#行
- -e: 實(shí)現(xiàn)多個(gè)選項(xiàng)間的邏輯or關(guān)系。grep –e ‘cat ’ -e ‘dog’ file
- -w: 整行匹配整個(gè)單詞
- -E: 使用擴(kuò)展正則表達(dá)式
- -F: 相當(dāng)于fgrep,不支持正則表達(dá)式
grep命令使用簡(jiǎn)單實(shí)例
1.顯示所有以d開(kāi)頭的文件中包含 test的行
$ grep ‘test’ d*
2.顯示在aa,bb,cc文件中匹配test的行。
$ grep ‘test’ aa bb cc
3.顯示所有包含每個(gè)字符串至少有5個(gè)連續(xù)小寫(xiě)字符的字符串的行。
$ grep ‘[a-z]\{5\}’ aa
4.如果west被匹配,則es就被存儲(chǔ)到內(nèi)存中,并標(biāo)記為1,然后搜索任意個(gè)字符(.*),這些字符后面緊跟著 另外一個(gè)es(\1),找到就顯示該行。
$ grep ‘w\(es\)t.*\1′ aa
如果用egrep或grep -E,就不用”\”號(hào)進(jìn)行轉(zhuǎn)義,直接寫(xiě)成’w(es)t.*\1′就可以了。
#有一點(diǎn)要注意,您必需提供一個(gè)文件過(guò)濾方式(搜索全部文件的話用 *)。如果您忘了,’grep’會(huì)一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按 <CTRL c> ,然后再試。
sed ??[options] ‘command’ file(s)
sed?[options]?-f?scriptfile?file(s)
sed是一種流編輯器,它一次處理一行內(nèi)容。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容 ,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒(méi)有改變 ,除非你使用重定向存儲(chǔ)輸出。Sed主要用來(lái)自動(dòng)編輯一 個(gè)或多個(gè)文件,簡(jiǎn)化對(duì)文件的反復(fù)操作,編寫(xiě)轉(zhuǎn)換程序等
-n ? 不輸出模式空間中的內(nèi)容到屏幕
-e ?多點(diǎn)編輯 ? 可以在一個(gè)sed命令中 ?同時(shí)處理多個(gè)腳本
-f ?每行一個(gè)編輯命令 ?sed 腳本
-r ? 支持?jǐn)U展的正則表達(dá)式
-l ? 直接編輯原文件
地址定界:
1.空地址:對(duì)全文進(jìn)行處理
2.單地址:
#:指定行;
/pattern/:被此模式所匹配到的行; 注意/ /雙斜線必須寫(xiě) ?這是格式要求
3.地址范圍:
#,#
#,+#
#,/pat1/
/pat1/,/pat2/
4.步進(jìn):(隔一行編輯)
1-2:所有的奇數(shù)行
2-2:所有的偶數(shù)行
編輯命令:
d: 刪除
p: ?顯示模式空間中的內(nèi)容
a:\text:在行后面追加文本“text”,支持使用\n 實(shí)現(xiàn)多行追加
l:\text:在行前面插入文本“text”,支持使用\n實(shí)現(xiàn)多行插入 ? ? (轉(zhuǎn)義)
c:\text:把匹配到的行替換為此處指定的文本“text”(替換一整行而不是某一個(gè))O
w: /PATH/TO/SOMEFILE:保存模式空間到的行至指定的文件中
r 把一個(gè)文件下的內(nèi)容添加到所讀的文件中去 ?文件合并
比如 ?sed ‘3r /etc/fstab /etc/passwd
把/passwd這個(gè)文件添加到 ? /fastab中 ? 從第三行開(kāi)始
= :為模式匹配到的行打印行號(hào)
?。簵l件取反 ?相當(dāng)于^
地址定界!編輯命令
s///:查找替換,其分隔符可自行指定,常用的有s@@@,s###等
替換標(biāo)記:
g:全局替換
w /PATH/HOMEFILE :將替換成功的結(jié)果保存至指定文件中
p:顯示替換成功的行
高級(jí)編輯命令:
h:把模式空間中的內(nèi)容覆蓋至保持空間中
H:把模式空間中的內(nèi)容追加至保持空間中
g:把保持空間中的內(nèi)容覆蓋至模式空間中
G:把保存空間中的內(nèi)容追加至模式空間中
x:把模式空間中的內(nèi)容與保持空間中的內(nèi)容互換
n:覆蓋讀取匹配到的行下一行至模式空間中
N:追加讀取匹配到的行下一行至模式空間中
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行
示例
sed -n ‘n;p FILE :顯示偶數(shù)行
sed ‘1!G;h;$!d’ FILE :逆序顯示文件中的內(nèi)容
sed ‘$!d FILE : 取出最后一行
sed ‘$!N;$!D’ FILE :顯示文件的后兩行
sed ’/^$/d;G FILE :刪除原有的所有的空白行 而后為每一行后面都加上空白行
sed ‘n;d’ FILE :顯示奇數(shù)行
sed ‘G’ FILE :在原有的每行后方添加一個(gè)空白行
注意:
sed -i 是直接修改原文件,不是在模式空間 慎重 慎重 慎重
awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。簡(jiǎn)單來(lái)說(shuō)awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開(kāi)的部分再進(jìn)行各種分析處理。