天天看點

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

簡介

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

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

正規表達式

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

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

大師兄 -- AWK

  • awk 是對文本進行格式化的工具,适合處理比較複雜的格式處理。
  • 有多個版本: 1、new awk: nawk ;2、gawk, awk
  • awk 指令格式:

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

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

格式說明:
  1. pattern部分決定動作語句何時觸發及觸發事件:BEGIN、END
  2. action 對資料進行處理,放在{}内指明: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 參數:輸入分隔符,預設以空白字元分隔,通過 -F 選項來執行分隔符

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

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

輸出分隔符,預設情況下輸出分隔符是空格,使用内置變量 OFS 來設定輸出分隔符,需要加上 -v 選項

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

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

5. awk 變量

FS:輸入字段分隔符,預設空白字元,一般需要加 -F

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

NF:分隔後的字段數量

NR:目前行的行号

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

關系運算模式:awk -F '#' 'NF==5 {print $1}' test

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

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

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

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」
二師兄 -- sed
  • sed 是一種流編輯器,它一次處理一行内容。處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”,接着用 sed 指令處理緩沖區中的内容,處理完成後,把緩沖區的内容送往螢幕。
  • sed 指令格式:

sed [options]... 'script' inputfile

選項
  1. -n:不輸出模式空間内容到螢幕,即不自動列印
  2. -e:多點編輯
  3. -f /PATH/SCRIPT_FILE:從指定檔案中讀取編輯腳本
  4. -r:支援使用擴充正規表達式
  5. -i:直接編輯檔案
  6. -i.bak:備份檔案并原處編輯
script 位址定界
  1. 不給位址:對全文進行處理
  2. 單位址:

#:指定的行; $:最後一行

/pattern/:被此處模式所能夠比對到的每一行

編輯指令
  1. d 删除模式空間比對的行,并立即啟用下一輪循環
  2. p 顯示符合條件的行,追加到預設輸出之後
  3. a []text1 在指定行後面追加文本,支援使用n實作多行追加
  4. i []text 在行前面插入文本
  5. c []text 替換行為單行或多行文本
  6. w /path/somefile 儲存模式比對的行至指定檔案
  7. r /path/somefile 讀取指定檔案的文本至模式空間中比對到的行後
  8. = 為模式空間中的行列印行号
  9. ! 模式空間中比對行取反處理
  10. s///:查找替換,支援使用其它分隔符,[email protected]@@,s###
替換标記:
  1. g 行内全局替換
  2. p 顯示替換成功的行
  3. w /PATH/TO/SOMEFILE 将替換成功的行儲存至檔案中
執行個體說明:

sed -n 2p test 列印第 2 行内容

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

sed -n 2,5p test 列印第 2--5 行内容

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

sed -i 's/a/v/g' test 将檔案中的 a 全部替換為 v 「sed替換格式是:sed -i ‘s/要替換的内容/替換成的内容/g' 檔案名」

mac 
           
awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」
三師兄 -- grep
  • grep 強大的文本搜尋工具,根據模式搜尋文本,并将符合模式的文本行顯示出來。
  • gerp 指令格式:

grep 【option】 pattern 【file】

option:
  • -i:忽略字元大小寫
  • -n:顯示比對的行号
  • -v:顯示沒有被比對的行
  • --color:将比對的字元以高亮顔色标記出來
  • -c:統計比對的行數
  • -o:僅顯示比對到的字元串
  • -q:靜默模式,不輸出任何資訊
  • -e:實作多個選項間的邏輯 or 關系
  • -v:反轉查找
  • -w:比對整個單詞
  • -A:after ,顯示後行
  • -B:before ,顯示前行
  • -C:context,顯示前後行
  • -E:相當于 egrep,即 grep -E = egrep
執行個體說明:

grep -i 'b' test 在檔案 test 中查找字元 b

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -q 'abc' test 靜默執行。不會輸出任何資訊,如果指令運作成功傳回0,失敗則傳回非0值。一般用于條件測試

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -n 'v' test 查找包含字元 v 的行數

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -nv 'v' test 查找不包含字元 v 的行數

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -n v$ test 查找以 v 結尾的行

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -v 'v' test 反向查找

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep 'ljl' -A 2 test 輸出比對結果行的後 2 行

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep 'wooow' -B 2 test 輸出比對結果行的前 2 行

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep 'wooow' -C 2 test 輸出比對結果行的前後 2 行

awk 分隔符_Linux 三劍客執行個體詳解「grep、sed 、awk」

grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test* 多個檔案查找比對的結果行

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