簡介
Linux 操作文本的三大利器分别是 grep、sed 、awk,簡稱三劍客。
大師兄 awk:最擅長取列;二師兄 sed:最擅長取行;三師兄 grep:最擅長過濾。
正規表達式
*** 三位師兄閃亮登場啦 ***
大師兄 -- AWK
- awk 是對文本進行格式化的工具,适合處理比較複雜的格式處理。
- 有多個版本: 1、new awk: nawk ;2、gawk, awk
- awk 指令格式:
awk [options] 'script' file1 file2, ...
awk [options] 'PATTERN {acticon}' file1 file2, ...
格式說明:- pattern部分決定動作語句何時觸發及觸發事件:BEGIN、END
- action 對資料進行處理,放在{}内指明:print、printf
- 最常用的是 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
輸出分隔符,預設情況下輸出分隔符是空格,使用内置變量 OFS 來設定輸出分隔符,需要加上 -v 選項
awk -v OFS="-->" '{print $1,$2}' test
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 -F '#' 'NF>=4 && NF<=5 {print $1}' test
二師兄 -- sed- sed 是一種流編輯器,它一次處理一行内容。處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”,接着用 sed 指令處理緩沖區中的内容,處理完成後,把緩沖區的内容送往螢幕。
- sed 指令格式:
sed [options]... 'script' inputfile
選項- -n:不輸出模式空間内容到螢幕,即不自動列印
- -e:多點編輯
- -f /PATH/SCRIPT_FILE:從指定檔案中讀取編輯腳本
- -r:支援使用擴充正規表達式
- -i:直接編輯檔案
- -i.bak:備份檔案并原處編輯
- 不給位址:對全文進行處理
- 單位址:
#:指定的行; $:最後一行
/pattern/:被此處模式所能夠比對到的每一行
編輯指令- d 删除模式空間比對的行,并立即啟用下一輪循環
- p 顯示符合條件的行,追加到預設輸出之後
- a []text1 在指定行後面追加文本,支援使用n實作多行追加
- i []text 在行前面插入文本
- c []text 替換行為單行或多行文本
- w /path/somefile 儲存模式比對的行至指定檔案
- r /path/somefile 讀取指定檔案的文本至模式空間中比對到的行後
- = 為模式空間中的行列印行号
- ! 模式空間中比對行取反處理
- s///:查找替換,支援使用其它分隔符,[email protected]@@,s###
- g 行内全局替換
- p 顯示替換成功的行
- w /PATH/TO/SOMEFILE 将替換成功的行儲存至檔案中
sed -n 2p test 列印第 2 行内容
sed -n 2,5p test 列印第 2--5 行内容
sed -i 's/a/v/g' test 将檔案中的 a 全部替換為 v 「sed替換格式是:sed -i ‘s/要替換的内容/替換成的内容/g' 檔案名」
mac
三師兄 -- 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
grep -q 'abc' test 靜默執行。不會輸出任何資訊,如果指令運作成功傳回0,失敗則傳回非0值。一般用于條件測試
grep -n 'v' test 查找包含字元 v 的行數
grep -nv 'v' test 查找不包含字元 v 的行數
grep -n v$ test 查找以 v 結尾的行
grep -v 'v' test 反向查找
grep 'ljl' -A 2 test 輸出比對結果行的後 2 行
grep 'wooow' -B 2 test 輸出比對結果行的前 2 行
grep 'wooow' -C 2 test 輸出比對結果行的前後 2 行
grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test* 多個檔案查找比對的結果行
(#^.^#)---我是有底線的---(#^.^#)