全面搜索正則表達式(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"