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 顯示出現多次的行
例子:行轉換爲列顯示,去掉重複的行,顯示重複次數,並且按升序打印