全面搜索正則表達式(Global search regular expression(RE) ,GREP)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
Unix/Linux的grep家族包括grep、egrep和fgrep,其中egrep和fgrep的命令跟grep有細微的區別,egrep是grep的擴展,支持更多的re元字符, fgrep是fixed grep或fast grep簡寫,它們把所有的字母都看作單詞,正則表達式中的元字符表示其自身的字面意義,不再有其他特殊的含義,一般使用比較少。
目前Linux操作系統默認使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。其語法格式及常用參數詳解如下:
1)Grep工具的語法格式:
grep -option(參數) word(字符) file(文件);
Option參數:-a(文本形式)、-c(統計)、-i(忽略大小寫)、-v(反選|排除)、-n(行號)、-o(打印匹配詞)、-E(擴展參數|egrep)、-A(after匹配之後行)、-B(before匹配之前行)、-C(context 匹配前和後的行)、-r(遞歸目錄搜索)等;
File文件:匹配的對象,從什麼地方進行匹配、文本文件、輸出結果;
主要參數
[options]主要參數:
-a 不要忽略二進制數據。
-An 除了顯示符合範本樣式的那一行之外,並顯示該行之後n行的內容。
-Bn 在顯示符合範本樣式的那一行之外,並顯示該行之前n行的內容。
-c 只輸出匹配行的計數。
-Cn 除了顯示符合範本樣式的那一行之外,並顯示該列之前後的內容。
-d <進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作。
-e <範本樣式> 指定字符串作為查找文件內容的範本樣式。 制動多個匹配樣式:
-E 將範本樣式為延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
-f <範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式為每一列的範本樣式。
-F 將範本樣式視為固定字符串的列表。
-G 將範本樣式視為普通的表示法來使用。
-h 在顯示符合範本樣式的那一行之前,不標示該列所屬的文件名稱。
-H 在顯示符合範本樣式的那一行之前,標示該列的文件名稱。
-i 忽略字符大小寫的差別。
-l 列出文件內容符合指定的範本樣式的文件名稱。
-L 列出文件內容不符合指定的範本樣式的文件名稱。
-n 顯示匹配行及 行號。
-q 不顯示任何信息。
-R/-r 遞歸的對目錄下的所有文件(包括子目錄)進行 grep-s 不顯示不存在或無匹配文本的錯誤信息。
-v 反轉查找。
-V 顯示版本信息
-w 只顯示全字符合的列。
-x 只顯示全列符合的列。
-y 此參數效果跟“-i”相同。
-o 只輸出文件中匹配到的部分
2)通配符類型詳解
* 0個或者多個字符、數字;
? 匹配任意一個字符;
# 表示註解;
| 管道符號;
; 多個命令連續執行;
& 後台運行指令;
! 邏輯運算非;
[ ] 內容範圍,匹配括號中內容;
{ } 命令塊,多個命令匹配。
3)正則表達式主要參數:
* 前一個字符匹配0次或多次;
. 匹配除了換行符以外任意一個字符;
.* 代表任意字符;
^ 匹配行首,即以某個字符開頭;
$ 匹配行尾,即以某個字符結尾;
\(..\) 標記匹配字符;
[] 匹配中括號裏的任意指定字符,但只匹配一個字符;
[^] 匹配除中括號以外的任意一個字符;
\ 轉義符,取消特殊含義;
\< 錨定單詞的開始;
\> 錨定單詞的結束;
{n} 匹配字符出現n次;
{n,} 匹配字符出現大於等於n次;
{n,m} 匹配字符至少出現n次,最多出現m次;
\w 匹配文字和數字字符;
\W \w的反置形式,匹配一個或多個非單詞字符;
\b 單詞鎖定符;
\s 匹配任何空白字符;
\d 匹配一個數字字符,等價於[0-9]。
4)常用GREP工具企業演練案列:
grep -c "test" jfedu.txt 統計test字符總行數;
grep -i "TEST" jfedu.txt 不區分大小寫查找TEST所有的行;
grep -n "test" jfedu.txt 打印test的行及行號;
grep -v "test" jfedu.txt 不打印test的行;
grep "test[53]" jfedu.txt 以字符test開頭,接5或者3的行;
grep "^[^test]" jfedu.txt 顯示輸出行首不是test的行;
grep "[Mm]ay" jfedu.txt 匹配M或m開頭的行;
grep "K…D" jfedu.txt 匹配K,三個任意字符,緊接D的行;
grep "[A-Z][9]D" jfedu.txt 匹配大寫字母,緊跟9D的字符行;
grep "T\{2,\}" jfedu.txt 打印字符T字符連續出現2次以上的行;
grep "T\{4,6\}" jfedu.txt 打印字符T字符連續出現4次及6次的行;
grep -n "^$" jfedu.txt 打印空行的所在的行號;
grep -vE "#|^$" jfedu.txt 不匹配文件中的#和空行;
grep --color -ra -E "db|config|sql" * 匹配包含db或者config或者sql的文件;
grep --color -E "\<([0-9]{1,3}\.){3}([0-9]{1,3})\>" jfedu.txt 匹配IPV4地址。
ifconfig|grep -w inet
ifconfig|grep netmask
ifconfig|grep 255
ifconfig|grep -E "192|127"