linux中常用的三大文本處理器平夜。grep, sed 和 awk 三種线脚,可謂一個(gè)比一個(gè)高級(jí)那婉,今天只是簡(jiǎn)單粗略的比較一下板甘。
grep 文本搜集工具,結(jié)合正則表達(dá)式非常強(qiáng)大详炬,簡(jiǎn)單易用盐类。但缺點(diǎn)也很明顯,沒(méi)有編輯能力呛谜。功能不全面在跳。
grep 過(guò)濾操作? egrep? fgrep
根據(jù)字符串模式提取文本行
-grep [選項(xiàng)] '匹配模式' 文本文件 。隐岛。猫妙。。聚凹。割坠。? ? ? OR? ? -命令行 | grep [選項(xiàng)] '匹配模式'
常用選項(xiàng):
-E:開啟擴(kuò)展(Extend)的正則表達(dá)式
-i:忽略大小寫 (ignore case)
-v:取反 (invert)
-n:顯示行號(hào)
-w:被匹配的文本只能是單詞,而不是單詞的某一部分妒牙。
-c:顯示總共有多少行被匹配到彼哼,而不是匹配到的內(nèi)容。-cv顯示多少行沒(méi)匹配到湘今。
-o:只顯示被匹配到的字符串敢朱。
--color:將匹配到的內(nèi)容以顏色高亮顯示。
egrep過(guò)濾工具? = grep -E
文本處理順序
-以行為單位象浑,逐行進(jìn)行處理
-默認(rèn)只輸出與表達(dá)式相匹配的文本行蔫饰。
基本用法
-格式 1. egrep [選項(xiàng)] '正則表達(dá)式‘ 文件。愉豺。篓吁。。蚪拦。杖剪。 OR? 前置命令 | egrep [選項(xiàng)] '正則表達(dá)式‘
-q:靜默冻押,無(wú)任何輸出,一般用于檢驗(yàn)(看$盛嘿?返回值)洛巢。
sed是一項(xiàng)Linux指令,功能同awk類似次兆,差別在于稿茉,sed簡(jiǎn)單,對(duì)列處理的功能要差一些芥炭,awk的功能復(fù)雜漓库,對(duì)列處理的功能比較強(qiáng)大。
sed工具概述:stream EDitor,流式編輯器(這個(gè)和vi有類似之處园蝠,不過(guò)vi是交互的)
-非交互渺蒿,基于模式匹配過(guò)濾及修改文本。
-逐行處理彪薛,并將結(jié)果輸出到屏幕茂装。
-可實(shí)現(xiàn)對(duì)文本的輸出,刪除善延,替代少态,復(fù)制,剪切挚冤,導(dǎo)入導(dǎo)出等各種操作况增。
主要用法:
-格式1:前置命令 | sed [選項(xiàng)] '編輯指令‘
-格式2:sed [選項(xiàng)] '編輯指令' 文件。训挡。澳骤。。澜薄。为肮。
命令選項(xiàng)
-n:屏蔽默認(rèn)輸出(全部文本)
-i:直接修改文件內(nèi)容。
-r:?jiǎn)⒂脭U(kuò)展正則表達(dá)式(若與其他選項(xiàng)一起使用肤京,則為首選項(xiàng))颊艳。
-{}:可組合多個(gè)命令,以分號(hào)分隔忘分。
定址符棋枕,即[地址1][地址2]
-用來(lái)指定處理的起,止行數(shù)妒峦。
-省略定址符時(shí)重斑,默認(rèn)逐行處理全部文本。
-地址可表示為文本的“行號(hào)”肯骇,或者用來(lái)匹配的正則表達(dá)式窥浪。
處理動(dòng)作
操作符? ? ? ? ? ? ? 用途? ? ? ? ? ? ? ? ? ? ? ? 指令示例
P? ? ? ? 打印行? ? ? ? 2:4p 輸出第2祖很,3,4行
2p漾脂;4p 輸出第2行假颇,4行
d? ? ? ? 刪除行? ? ? ? 2,4d? 刪除第2骨稿,3笨鸡,4行
s? ? ? ? 字符號(hào)替代? s/old/new/ 將每行的第一個(gè)old替換為new
sed的文本塊處理動(dòng)作
i 行前插入文本? a 行后插入文本? ? c? 替代當(dāng)前行
sed高級(jí)應(yīng)用
導(dǎo)入導(dǎo)出操作
-r動(dòng)作應(yīng)結(jié)合 -i 選項(xiàng)才會(huì)存入,否則只會(huì)輸出坦冠。 -w 動(dòng)作以覆蓋的方式另存為
sed復(fù)制剪切
模式空間
-存放當(dāng)前處理的行镜豹,將處理結(jié)果輸出
-若當(dāng)前行不符合處理?xiàng)l件,則原樣輸出
-處理完當(dāng)前行再讀入下一行處理
保持空間
-作用類似于“剪切版”
-默認(rèn)存放一個(gè)空行 (換行符\n)
sed 復(fù)制剪切
-H:模式空間---[追加]--->保持空間? ? 復(fù)
-h: 模式空間---[覆蓋]--->保持空間? ? 制
-G: 粘貼 追加
-g: 粘貼 覆蓋
蓝牲! 取反操作
AWK是一種優(yōu)良的文本處理工具。它不僅是 Linux 中也是任何環(huán)境中現(xiàn)有的功能最強(qiáng)大的數(shù)據(jù)處理引擎之一泰讽。最簡(jiǎn)單地說(shuō)例衍, AWK 是一種用于處理文本的編程語(yǔ)言工具。AWK 在很多方面類似于 shell 編程語(yǔ)言已卸,盡管 AWK 具有完全屬于其本身的語(yǔ)法佛玄。AWK 提供了極其強(qiáng)大的功能:可以進(jìn)行樣式裝入、流控制累澡、數(shù)學(xué)運(yùn)算符梦抢、進(jìn)程控制語(yǔ)句甚至于內(nèi)置的變量和函數(shù)。它具備了一個(gè)完整的語(yǔ)言所應(yīng)具有的幾乎所有精美特性愧哟。實(shí)際上 AWK 的確擁有自己的語(yǔ)言:AWK 程序設(shè)計(jì)語(yǔ)言奥吩, 三位創(chuàng)建者已將它正式定義為“樣式掃描和處理語(yǔ)言”。它允許您創(chuàng)建簡(jiǎn)短的程序蕊梧,這些程序讀取輸入文件霞赫、為數(shù)據(jù)排序、處理數(shù)據(jù)肥矢、對(duì)輸入執(zhí)行計(jì)算以及生成報(bào)表端衰,還有無(wú)數(shù)其他的功能。
awk 工具概述
awk 編程語(yǔ)言/ 數(shù)據(jù)處理引擎
-基于模式匹配檢查輸入文本甘改,逐行處理并輸出旅东。
-通常用在shell腳本中,獲取制定的數(shù)據(jù)十艾。
-單獨(dú)用時(shí)抵代,可對(duì)文本數(shù)據(jù)做統(tǒng)計(jì)。
主要用法
-格式1:前置命令|awk∨备[選項(xiàng)] ‘[條件]{編輯指令}'
-格式2:awk≈魇亍[選項(xiàng)]≠骶蟆'[條件]{編輯指令}' 文件。参淫。救湖。
常用選項(xiàng):-F:指定分隔符,可省略(默認(rèn)空格或Tab位)
-V:調(diào)用外部shell變量
awk內(nèi)置變量∠巡拧(有特殊含義鞋既,可直接使用)
FS 保存或設(shè)置字段分隔符,例如FS=“:”
$n 指定分隔的第n個(gè)字段耍铜,如$1邑闺,$3分別表示第一,第三列
$0 當(dāng)前讀入的整行文本內(nèi)容
NF 記錄當(dāng)前處理行的字段個(gè)數(shù)(列數(shù))
NR 記錄當(dāng)前已讀入行的數(shù)量(行數(shù))
awk過(guò)濾
在所有行前處理棕兼,BEGIN{}
-讀入第一行文本之前執(zhí)行
-一般用來(lái)初始化操作
逐行處理陡舅,{}
-逐行讀入文本執(zhí)行相應(yīng)的處理 可單獨(dú)使用
-是最常見的編輯指令塊 也可以同時(shí)一起使用
在所有行處理,END{}
-處理完最后一行文本之后執(zhí)行
-一般用來(lái)輸出處理結(jié)果
處理?xiàng)l件概述
格式回顧
-awk“橹俊[選項(xiàng)]“醒堋'[條件]{編輯指令}' 文件。茎芋。颅眶。。田弥。涛酗。
條件的表現(xiàn)形式?
-正則表達(dá)式⊥迪谩-~匹配商叹,!~不匹配
-數(shù)值/字符串比較
-邏輯比較
-運(yùn)算符
數(shù)值比較
==等于 ≈黄谩I蜃浴=不等于 >大于 」技恕>=大于或等于 】萃尽<小于 <=小于或等于
邏輯比較
&&期望多個(gè)條件都成立
||只要有一個(gè)條件成立即滿足要求
運(yùn)算符
+〖巍-±乙摹* /∧醵琛%⊥砹搿++ --⊙Α+=√贡ā-=】馑怠*= /=∑瘛%=
利用sort對(duì)提取結(jié)果排序
-n:按數(shù)字升序排列
-k:針對(duì)指定的字段進(jìn)行排序
-r:反向排序
awk分支結(jié)構(gòu)
單分支 if(條件){編輯指令}
雙分支 if(條件){編輯指令1}else{編輯指令2}
多分支? if(條件){編輯指令1}else if(條件){編輯指令2}......else{編輯指令N}
while循環(huán)? -while(條件){編輯指令}
數(shù)組的定義及使用
定義數(shù)組
-格式:數(shù)組名[下標(biāo)]=元素值
調(diào)用數(shù)組
-格式:數(shù)組名[下標(biāo)]
遍歷數(shù)組
-用法:for(變量in數(shù)組名){print數(shù)組名[變量]}