Linux 三劍客實例詳解「grep、sed 、awk」

簡介

Linux 操作文本的三大利器分別是?grep、sed 、awk,簡稱三劍客。

大師兄 awk:最擅長取列;二師兄 sed:最擅長取行;三師兄 grep:最擅長過濾。

正則表達式

正則表達式

*** 三位師兄閃亮登場啦 ***

大師兄 -- AWK??

1、awk 是對文本進行格式化的工具,適合處理比較復(fù)雜的格式處理。

2、有多個版本: 1、new awk: nawk ;2、gawk, awk

3、awk 命令格式:

? ? ? ? awk?[options] 'script' file1? file2, ...

? ? ? ? awk?[options] 'PATTERN {acticon}'? file1 file2, ...

? ? 格式說明:

? ? ? ? 1、pattern部分決定動作語句何時觸發(fā)及觸發(fā)事件:BEGIN、END

? ? ? ? 2、action 對數(shù)據(jù)進行處理,放在{}內(nèi)指明:print、printf

? ? ? ? 3、最常用的是 print,默認以空白字符分隔

? ? ? ? ? ? ? $0 代表整行,$1 代表第 1 段,$2? 代表第 2 段,以此類推,$NF 代表最后一個字段,多個字段直接用逗號隔開

? ? ? ? ? ? ? awk '{print $1, $2}' xxx.log

? ? ? ? ? ? ? 打印操作支持拼接打印,如:awk '{print "first" $1, $2}' xxx.log

? ? 4. options 參數(shù):輸入分隔符,默認以空白字符分隔,通過 -F 選項來執(zhí)行分隔符

? ? ? ? awk -F '#' '{print $1,$2}'? test

輸出分隔符,默認情況下輸出分隔符是空格,使用內(nèi)置變量 OFS 來設(shè)定輸出分隔符,需要加上 -v 選項

awk -v OFS="-->" '{print $1,$2}' test

? 5. awk 變量

? ? ? FS:輸入字段分隔符,默認空白字符,一般需要加 -F

? ? ? OFS:輸出字段分隔符,默認是空格,一般需要加 -v

? ? ? ?NF:分隔后的字段數(shù)量

? ? ? ?NR:當(dāng)前行的行號

? 6. pattern 模式:模式是條件,符合條件的行, awk 才會進行處理

? ? ?關(guān)系運算模式:awk -F '#' 'NF==5 {print $1}' test

? ? ?如果行的分段數(shù)量為5 的話,進行打印操作,其他的類似,如 NF>2,NF<4,$1==1234 等都是判斷條件

? ? ? awk -F '#'? 'NF>=4 && NF<=5 {print $1}' test

二師兄 -- sed

1、sed 是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”,接著用 sed 命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。

2、sed 命令格式:

? ? sed??[options]... 'script' inputfile

選項

1、-n:不輸出模式空間內(nèi)容到屏幕,即不自動打印

2、-e:多點編輯

3、-f /PATH/SCRIPT_FILE:從指定文件中讀取編輯腳本

4、-r:支持使用擴展正則表達式

5、-i:直接編輯文件

6、-i.bak:備份文件并原處編輯

script 地址定界

1、不給地址:對全文進行處理

2、單地址:

? ? ? ?#:指定的行; $:最后一行

? ? ? /pattern/:被此處模式所能夠匹配到的每一行

編輯命令

1、d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)

2、p 顯示符合條件的行,追加到默認輸出之后

3、a [\]text1 在指定行后面追加文本,支持使用\n實現(xiàn)多行追加

4、i [\]text 在行前面插入文本

5、c [\]text 替換行為單行或多行文本

6、w /path/somefile 保存模式匹配的行至指定文件

7、r /path/somefile 讀取指定文件的文本至模式空間中匹配到的行后

8、= 為模式空間中的行打印行號

9、! 模式空間中匹配行取反處理

10、s///:查找替換,支持使用其它分隔符,s@@@,s###

替換標(biāo)記:

1、g 行內(nèi)全局替換

2、p 顯示替換成功的行

3、w /PATH/TO/SOMEFILE 將替換成功的行保存至文件中

實例說明:

sed -n 2p test? ? ?打印第 2 行內(nèi)容

sed -n 2,5p test? ? 打印第 2--5 行內(nèi)容

sed -i 's/a/v/g' test? ? 將文件中的 a 全部替換為 v 「sed替換格式是:sed -i ‘s/要替換的內(nèi)容/替換成的內(nèi)容/g' 文件名」

三師兄 -- grep

1、grep 強大的文本搜索工具,根據(jù)模式搜索文本,并將符合模式的文本行顯示出來。

2、gerp 命令格式:

? ? ? grep 【option】 pattern 【file】

option:

-i:忽略字符大小寫

-n:顯示匹配的行號

-v:顯示沒有被匹配的行

--color:將匹配的字符以高亮顏色標(biāo)記出來

-c:統(tǒng)計匹配的行數(shù)

-o:僅顯示匹配到的字符串

-q:靜默模式,不輸出任何信息

-e:實現(xiàn)多個選項間的邏輯 or 關(guān)系

-v:反轉(zhuǎn)查找

-w:匹配整個單詞

-A:after ,顯示后行

-B:before ,顯示前行

-C:context,顯示前后行

-E:相當(dāng)于 egrep,即 grep -E = egrep

實例說明:

grep -i 'b' test? 在文件 test 中查找字符 b

grep -q 'abc' test??靜默執(zhí)行。不會輸出任何信息,如果命令運行成功返回0,失敗則返回非0值。一般用于條件測試

grep -n 'v' test 查找包含字符 v 的行數(shù)

grep -nv 'v' test? ?查找不包含字符 v 的行數(shù)

grep -n v$?test? 查找以 v?結(jié)尾的行

grep -v 'v' test? 反向查找

grep 'ljl' -A 2?test? 輸出匹配結(jié)果行的后 2 行

grep 'wooow' -B 2 test? 輸出匹配結(jié)果行的前 2 行

grep 'wooow' -C 2 test? ?輸出匹配結(jié)果行的前后 2 行

grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test*? 多個文件查找匹配的結(jié)果行


? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(#^.^#)---我是有底線的---(#^.^#)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容