1. 程式人生 > >正則表示式及grep、sed、awk、cut、sort、uniq工具

正則表示式及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~
0

(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 顯示出現多次的行

例子:行轉換為列顯示,去掉重複的行,顯示重複次數,並且按升序列印
這裡寫圖片描述