正則表示式及grep、sed、awk、cut、sort、uniq工具
1.正則表示式
(1)定義:規定一些特殊語法用來對字串進行模糊匹配;
(2)特點:
①靈活性、邏輯性和功能性較強;
②可以迅速地用簡單的方式匹配字串;
(3)使用事項:當正則表示式作為命令引數時,要用單引號括起來,因為正則表示式中的某些字元在shell中有特殊意義,如轉義字元\,括起來後把原封不動地傳遞給命令。
2.字元的分類
(1)字元類
(2)數量限定符
(3)位置限定符
(4)其他字元
3.grep工具
grep:行過濾工具,會將文字中符合條件的行直接提取出來,它支援正則表示式。
命令選項:
- -E 表示擴充套件正則語法,某些字元表示特殊含義時,不需要進行轉義,也可以直接使用egrep;
- -i 忽略大小寫
- -R 遞迴式查詢
- -v 顯示不符合條件的行
- -q 安靜模式匹配,無論是否匹配到都不顯示,可以根據退出碼判斷是否匹配到;
4.標準正則語法和擴充套件正則語法的區別
標準正則語法和擴充套件正則語法的大部分規則相同,但對於一些有特殊含義的字元,如? + { } | ( )標準正則語法會將這些字元解釋為普通字元,使用正則表示式時,必須對這些字元加 \ 進行轉義
5.grep和正則表示式結合的例子
給出一個file檔案,包含一些與QQ郵箱,電話號碼,IP地址,163郵箱類似的字串,如圖所示:
按要求進行匹配,並使用- -color進行高亮顯示
(1)匹配出QQ郵箱
(2)匹配出電話號碼
(3)匹配出ip地址
(4)匹配出163郵箱
6.sed工具
sed:流式編輯器
(1) 命令格式: sed ‘/pattern/action’ file
- pattern表示每讀取一行進行正則匹配
- action表示進行相應的動作,命令
(2)命令選項
- -i 將處理結果寫入原檔案
- -n 只顯示匹配的結果
- -e 對模式空間的一行內容一次應用多種規則、動作
(3)action的命令選項
/pattern/p列印匹配的行
/pattern/d 刪除匹配的行
/pattern/s/p1/p2/ 查詢符合條件的行,用p2替換該行第一個匹配p1的字串
/pattern/s/p1/p2/g 查詢符合條件的行,用p2替換該行所有匹配p1的字串
(4)例子:
①註釋檔案中以printf開頭的行
②去掉printf前的註釋
③在file檔案中以a2開頭並且後面只有2的字串中,將2替換為~2~
(5)sed的模式空間和保持空間
模式空間:資料可以直接處理;
保持空間:在進行資料處理時,作為資料的暫存區域;一般情況下,只使用模式空間,對資料的加工處理只能在模式空間,而保持空間只是儲存資料,不做任何處理;
命令:
- g :將保持空間的內容拷貝至模式空間;
- G:將保持空間的內容追加至模式空間;
- h :將模式空間的內容拷貝至保持空間;
- h :將模式空間的內容追加至保持空間;
- d :刪除所有行,並讀入下一行到模式空間
- D :刪除當前行,不讀入下一行
- x :交換保持空間和模式空間的內容
- n :將下一行讀取到模式空間
- N:將下一行新增到模式空間
舉例:
①列印1~100相加之和
②給每行結尾新增空行顯示
③逆序列印檔案
④在一個檔案結尾追加以hello開頭的所有行
⑤將一列數轉換為一行數顯示
⑥列印奇偶數行
7.awk工具
(1)
awk可通過指定列或指定域處理資料;
awk將一行內容稱為一條記錄,將用指定分隔符分隔的列稱為域;
awk一般以空格作為域分隔符,以\n作為記錄分隔符;
awk也可以使用BEGIN和END進行匹配;(2) 命令格式:
awk ‘/pattern/{action}’ file
awk ‘condition{action}’ file(3)命令引數:
$0:表示當前整個行
$1:表示第一列 $2:表示第二列
$NF:最後一列 $(NF-1) :倒數第二列
(4)例子:
①列印file4檔案中的第二列
②列印以productA開頭的行的第二列
③產品價格大於50時,列印產品名和YES,產品價格小於50時,列印產品名和NO:
④
⑤計算1~100相加之和
(5)awk指令碼
指令碼第一行#!usr/bin/bah -f
①執行指令碼
./test.awk file
②若指令碼第一行沒有寫-f,執行時應該為awk -f test.awk file
(6)awk內建變數
OFS:輸出域分隔符
FS:設定輸出域分隔符(7)-F 指明域分隔符
8.cut工具
切割資料
①
②
9.sort工具
sort file 按升序輸出
sort -r file 按降序輸出
sort -u file 去掉重複的行
sort -r file -o file 將降序排好的檔案寫會原檔案
sort -n file 將字元按數值排序,預設升序
sort -k 2 file 將第二列進行排序
10.uniq工具
sort file | uniq 去掉重複的行
sort file | uniq -c 去掉重複的行並顯示重複次數
sort file | uniq -u 顯示出現一次的行
sort file | uniq -d 顯示出現多次的行
例子:行轉換為列顯示,去掉重複的行,顯示重複次數,並且按升序列印