天天看點

Linux正規表達式grep

    正規表達式是一種符号表示法,用于識别文本模式。Linux處理正規表達式的主要程式是grep。grep搜尋與正規表達式比對的行,并将結果輸送至标準輸出。

1. grep比對模式

grep按下述方式接受選項和參數(其中,regex表示正規表達式)

grep [options] regex [files]      

其中options主要為下表:

選項 含義 功能描述
-i ignore case 忽略大小寫
-v invert match 不比對比對的
-l file-with-match 輸出比對的檔案名
-L file-without-match 輸出不比對的檔案名
-c count 輸出比對的數目(行數)
-n number 輸出比對行的同時在前面加上檔案名及在檔案名中的行數
-h no-filename 抑制檔案名的輸出

舉例說明

假設有三個檔案del1、del2、del3三個檔案的内容如下

Linux正規表達式grep

例子

Linux正規表達式grep

2. 特殊字元

符号 舉例
^ 開始标記 "^abc"滿足的例子abc、abcd
非(在[]内) "[^abc]"滿足的例子:ddd、mpd
$ 結束标記 ”abc$”滿足的例子abc、mmabc
. 任意字元 "a.c"滿足的例子abc、fapcc
\< 比對單詞開始 "\<abc"滿足的例子abc、abcd
\> 比對單詞結束 "abc\>"滿足的例子abc、pmrabc
| "AAA|BBB"滿足的例子AAA、BBBpp

3. 範圍

? 比對前一個字元0或1次 "abc?"滿足的例子ab、mabcd
* 比對前一個字元≥0次 "abc*"滿足的例子abbb、abcdk
+ 比對前一個字元≥1次 "abc+"滿足的例子abcd、abcccdd
{} {m}、{m,n}、{m,}、{,n}分别為比對前一個字元m次、m到n次、≥m次、≤n次 "abc\{3,5\}"滿足的例子abcccc、abcccccc
[] []内如果不是範圍,選其一;是範圍的話,範圍内選其一 "m[abc]p"滿足的例子acpd;m[1-9]p滿足的例子m8pp
() 将候選的所有元素放在()内,用|隔開 "a(1|2|3)bc"滿足的例子a1bc、mba3bcd

注意:{}在鄭則表達式中需要轉移,而{}()不需要。    

注意了解{}範圍的例子:

Linux正規表達式grep

4. 标準字元類

字元類 釋義
[:alnum:] 字母和數字,與[A-Za-z0-9]等價
[:word:] [:alnum:]加上下劃線_
[:alpa:] 字母,與[A-Za-z]等價
[:digit:] 數字,與[0-9]等價
[:xdigit:] 十六進制字元,與[0-9A-Fa-f等價]
[:blank:] 空格和制表符
[:graph:] 可見字元,靠擴33~126
[:lower:] 小寫字母
[:upper:] 大寫字母
[:print:] 可列印字元
[:space:] 空白字元,等價于[\t\r\n\v\f]
[:punct:] 标點符号
[:cntrl:] ASCII控制碼,包括字元0~31以及127
Linux正規表達式grep

可視化正規表達式

工具:Regexper

Linux正規表達式grep