grep (Global Regular Expression Print)是一種文本搜索工具,能使用正則表達式搜索文本,並把匹配的行打印出來,egrep (Extended grep)擴展正則表達式,
語法
grep [options] PATTERN [FILE…]
PATTERN(模式): 文本字符和正則表達式的起名字符組合而成匹配條件
options(參數)
-i --ignore-case 忽略字母大小寫
--color 高亮顯示匹配的字符
-v 顯示沒有被模式匹配到的行
-o 只顯示被模式匹配到的字符串
-A # 顯示搜索到的行及後面#行的內容
-B # ………………………..前面#行的內容
-C # ………………………….前後各#行的內容
正則表達式:REGular EXPression, REGEXP 正則表達式是一種表示方式,讓你可以查找匹配特定準則的文本。
grep 引號的意義
‘ ’: 強引用,所見即所得:即將單引號內的內容原樣輸出,或者描述爲單引號裏面看到的是什麼就會輸出什麼。單引號''是全引用,被單引號括起的內容不管是常量還是變量者不會發生替換。grep ‘$a’file 表示的時查找 ‘$a’字符
“ ”: 把雙引號內的內容輸出出來;如果內容中有命令、變量等,會先把變量、命令解析出結果,然後在輸出最終內容來。雙引號""是部分引用,被雙引號括起的內容常量還是常量,變量則會發生替換,替換成變量內容。grep “$a”file 表示引用變量a,查找變量a的值
不加引號 : 不會將含有空格的字符串視爲一個整體輸出,如果內容中有命令、變量等,會先把變量、命令解析出結果,然後在輸出最終內容來,如果字符串中帶有空格等特殊字符,則不能完整的輸出,需要改加雙引號,一般連續的字符串,數字,路徑等可以用
正則表達式由兩個基本組成部隊建立:一般字符和特殊字符,一般字符指沒有特殊意義的字符,特殊字符常稱爲元字符。
元字符:
\ : 轉義符,如果元字符前面加有‘\’ 就表示爲其本身的意義,不再有元字符的特殊意義
. : 匹配任意單個字符
[ ] : 匹配指定範圍內的任意單個字符
[^]: 匹配指定範圍外的任意單個字符
字符集合
[:digit:] 表示數字集合0-9 [[:digit:]]與[0-9]的意義相同
[:lower:] 小寫字母集合
[:upper:] 大寫字母集合
[:punct:] 標點符號字符
[:space:] 空白格符[:blank:]空格(space)與定位(tab)字符
[:alpha:] 字母字符包括大小寫
[:alnum:] 字母數字字符(包括大小寫)
匹配次數字符
* : 匹配前面字符任意次,包括0
.* : 表示任意長度任意字符
\? : 匹配前面的字符一次或零次
\{m,n\} : 匹配其前面字符至少m次,至多n次,如果最多次數不限,n可以省略不寫,如果表示至少爲0次,m可以寫爲0,但不能不寫。\{1,\} \{0,3\}
注意: ‘\’ 在正則表達式中也代表有轉義的意思,與bash本身的意義區別。如?在bash中表示任意一個字符,這裏\?表示的是次數,{} 在bash中表示命令展開,在正則表示式中\{m,n\}表示次數,但在擴展正則表達式中可以不用’\‘來區分。
位置錨定:
^ : 錨定行首, 此字符後面的任意內容必須出現在行首
$ : … 行尾, ……………………………………………… 行尾
^$ : 空白行
\< 或 \b : 錨定詞首,其後面的任意字符必須做爲單詞的首部出現
\> 或 \b : …….詞尾, ………………………………………………..尾部出現
\<word\> : 匹配整個單詞 \< \>
分組:
\(\) : \(alnum\)* 表示把 (alnum) 做爲一個整體,匹配任意次
後向引用
\1 : 引用第一個左括號以及與之對應的右括號所包括的所有內容
\2 : 第二個
\n : 第n 個
即把前面分組的內容後面再引用
grep 命令就是使用字符或正則表達式規則來匹配文本的命令
egrep 擴展正則表達式,也grep –e 命令效果是一樣的
.
[]
[^] 與正則表達式的用法一樣
次數匹配
* : 和正則表達式作用一樣
? : 不用加 ’\’
+ : 匹配其前面的字符至少一次,類似正則表達式 \{1,\}
{m,n} : 不使用斜線
位置錨定符與正則表達式一樣
分組:
( ) : 與正則表達式\( \) 相比,不需要斜線
\1 \2 \3 後向引用
或者符
| :or 或意義 C|cat 表達的是C 或者 cat , (C|c)at 表示 Cat|cat 的意義