Linux文本處理三劍客:grep/sed/awk

grep:文本搜索

grep命令介紹

  • grep腔寡,用來查找文件中匹配指定文本的行并打印出來

  • 語法格式: grep [選項(xiàng)] PATTERN 文件名

  • 命令解釋:查找指定文件中包含PATTERN的行

常用選項(xiàng)

  • -r:遞歸查找指定目錄下的所有文件(grep命令默認(rèn)支持多個(gè)文件的查找广料,但不能在目錄中查找,如果需要在目錄中進(jìn)行查找,則需要使用 -r選項(xiàng)指定)忠荞。可以使用--exclude排除某些文件多搀,使用--exclude-file排除某些目錄

    grep -r  hello .
    grep hello test01.txt test02.txt
    
  • -c:只打印匹配的行數(shù),不顯示內(nèi)容

    grep -c Hello test01.txt
    
  • -i:忽略大小寫進(jìn)行匹配

    grep -i hello test01.txt
    
  • -v:反向匹配侧甫,打印不匹配的內(nèi)容

    grep -v hello test01.txt
    
  • -l:打印包含匹配項(xiàng)的文件名

    grep -l zip dirlist*.txt
    
  • -L:打印不包含匹配項(xiàng)的文件名

    grep -L zip dirlist*.txt
    
  • -n:在每個(gè)匹配行之前打印出其位于文件中的相應(yīng)行號(hào)

    grep -n zip dirlist*.txt
    
  • -E:使用正則表達(dá)式進(jìn)行匹配

    echo "BBB" | grep -E 'AAA|BBB'
    

sed:流編輯器

sed命令介紹

  • sed(stream editor珊佣,流處理器): 對(duì)文本流進(jìn)行編輯。在臨時(shí)緩沖區(qū)中創(chuàng)建副本文件披粟,只修改副本不修改源文件(可以使用-i直接修改源文件)咒锻,逐行處理文件,處理臨時(shí)緩沖區(qū)中的行守屉。

  • sed命令格式

    sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]
    

常用動(dòng)作

  • a :新增惑艇, a 的后面可以接字串,而這些字串會(huì)在新的一行出現(xiàn)(目前的下一行)~

    sed -e "1athis is a other line add by sed command" test01.txt
    
  • i :插入拇泛, i 的后面可以接字串滨巴,而這些字串會(huì)在新的一行出現(xiàn)(目前的上一行);

    sed -e '1ithis is a other line add by sed command' test01.txt
    
  • d :刪除

    # 打印test02.txt前四行
    sed -e '5,$d' test02.txt
    
  • s :替換

    sed -e 's/line/hello,sed./g' test01.txt
    sed -e '5s/line/line 5/1' -e '5s/line/hello,sed./2' test01.txt
    
  • -n與p配合使用(-n俺叭,關(guān)閉默認(rèn)打印恭取,p 打印匹配的行)

    sed -n '5s/line/hello, sed/1p' test01.txt
    
    • 實(shí)例:catalina.out提取某個(gè)時(shí)間段的日志,輸出到指定文件中

      # sed -n '/起始時(shí)間/,/結(jié)束時(shí)間/p'  日志文件 > 輸出文件
      sed -n '/2020-08-01 10:00*/,/2020-08-01 11:00*/p' catalina.out > aaa.txt
      

awk:文本分析

awk命令介紹

  • awk:通常用來進(jìn)行文本分析

  • awk用法

    awk '{[pattern] action}' {filenames}
    
    awk -F  #-F相當(dāng)于內(nèi)置變量FS, 指定分割字符
    
    awk -v  # 設(shè)置變量
    
    awk -f {awk腳本} {文件名}
    

常用動(dòng)作

示例文件 data.dat如下:

1,aaa,aaa@163.com,1995-04-05,12000
2,bbb,bbb@163.com,1996-08-15,10000
3,ccc,ccc@163.com,1998-06-07,8888
4,ddd,ddd@163.com,1994-05-04,14400
5,eee,eee@163.com,1996-03-23,7200
6,fff,fff@163.com,1995-02-21,16000
7,ggg,ggg@163.com,1997-11-12,18888
  • 打印文件 print

    awk '{print $0}' data.dat
    
  • 指定分隔符熄守,打印第2列與第3列

    [root@localhost cmd]# awk -F , '{print $2,$3}' data.dat 
    aaa aaa@163.com
    bbb bbb@163.com
    ccc ccc@163.com
    ddd ddd@163.com
    eee eee@163.com
    fff fff@163.com
    ggg ggg@163.com
    
  • 設(shè)置變量并使用(會(huì)修改源文件)

    [root@localhost cmd]# awk -F ',' -va=1000 '{print $2, $5+a}' data.dat 
    aaa 13000
    bbb 11000
    ccc 9888
    ddd 15400
    eee 8200
    fff 17000
    ggg 19888
    
  • 實(shí)現(xiàn)累加

    # 計(jì)算所有薪資
    [root@localhost cmd]# awk -F ',' '{sum+=$5}END{print sum}' data.dat 
    87376
    
    # 計(jì)算薪資大于15000的薪資總和
    [root@localhost cmd]# awk -F ',' '$5>15000 {sum+=$5}END{print sum}' data.dat 
    34888
    
  • 行號(hào)

    # 打印薪資大于12000的員工行號(hào)蜈垮、姓名和薪資
    [root@localhost cmd]# awk -F ',' '$5>12000 {print NR,$2,$5}' data.dat 
    4 ddd 14400
    6 fff 16000
    7 ggg 18888
    
    # 統(tǒng)計(jì)薪資大于12000的員工總數(shù)量
    [root@localhost cmd]# awk -F ',' '$5>12000' data.dat | wc -l 
    3
    

參考資料

菜鳥教程_linux

The Linux Command Line中文版

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市裕照,隨后出現(xiàn)的幾起案子攒发,更是在濱河造成了極大的恐慌,老刑警劉巖牍氛,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晨继,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搬俊,警方通過查閱死者的電腦和手機(jī)紊扬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唉擂,“玉大人餐屎,你說我怎么就攤上這事⊥嫠睿” “怎么了腹缩?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我藏鹊,道長(zhǎng)润讥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任盘寡,我火速辦了婚禮楚殿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竿痰。我一直安慰自己脆粥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布影涉。 她就那樣靜靜地躺著变隔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟹倾。 梳的紋絲不亂的頭發(fā)上匣缘,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音鲜棠,去河邊找鬼孵户。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岔留,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播检柬,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼献联,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了何址?” 一聲冷哼從身側(cè)響起里逆,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎用爪,沒想到半個(gè)月后原押,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偎血,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年诸衔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颇玷。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笨农,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帖渠,到底是詐尸還是另有隱情谒亦,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站份招,受9級(jí)特大地震影響切揭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锁摔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一廓旬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鄙漏,春花似錦嗤谚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桦踊,卻和暖如春椅野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背籍胯。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工竟闪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杖狼。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓炼蛤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝶涩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子理朋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359