正則表達式是一種符號表示法,用于識別文本模式。linux處理正則表達式的主要程序是grep。grep搜索與正則表達式匹配的行,并將結果輸送至標準輸出。
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三個文件的內容如下
例子
特殊字符
符號 含義 舉例 ^ 開始標記 "^abc"滿足的例子abc、abcd ^ 非(在[]內) "[^abc]"滿足的例子:ddd、mpd $ 結束標記 ”abc$”滿足的例子abc、mmabc . 任意字符 "a.c"滿足的例子abc、fapcc < 匹配單詞開始 " 匹配單詞結束 "abc>"滿足的例子abc、pmrabc | 或 "AAA|BBB"滿足的例子AAA、BBBpp
范圍
符號 含義 舉例 ? 匹配前一個字符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
注意:{}在鄭則表達式中需要轉移,而{}()不需要。
注意理解{}范圍的例子:
標準字符類
字符類 釋義 [: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:] 空白字符,等價于[ ] [:punct:] 標點符號 [:cntrl:] ASCII控制碼,包括字符0~31以及127