Regual Expression
由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字面意義,而是用于控制或通配的功能 分類
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:grep, vim, less,nginx等
分兩類:
基本正則表達式:BRE 擴展正則表達式:ERE grep -E, egrep
正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊 PCRE(Perl Compatible Regular Expressions)
元字符分類:
字符匹配、匹配次數、位置錨定、分組
man 7 regex
基本正則表達式 擴展正則表達式
grep:文本過濾(模式:pattern)工具;
grep, egrep, fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具;
awk:Linux上的實現gawk,文本報告生成器;
二者區別元字符不同
grep:global search regular expression and print out the line
作用:文本搜索工具,根據用戶指定的模式(過濾條件)對目標文本逐行匹配檢查,打印匹配到的行 模式:有正則表達式的元字符及文本字符所編寫出的過濾條件 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] grep root /etc/passwd grep "$USER" /etc/passwd #支持變量引用 grep '$USER' /etc/passwd grep `whoami` /etc/passwd #支持命令引用
grep
常見選項: --color=auto: 對匹配到的文本著色顯示; -v: 顯示不能夠被pattern匹配到的行; -i: 忽略字符大小寫 -n:顯示匹配的行號 -c: 統計匹配的行數 -o: 僅顯示匹配到的字符串; -q: 靜默模式,不輸出任何信息 -A #:after, 后#行 -B #: before, 前#行 -C #:context, 前后各#行 -e:實現多個選項間的邏輯or關系 grep –e ‘cat ’ -e ‘dog’ file -w:整行匹配整個單詞 -E:使用ERE
egrep= grep -E
grep 要用PATTERN就要用引號把PATTERN引上。
正則表達式的元字符
字符匹配----單個字符 .:點號匹配任意單個字符 []:匹配指定范圍內的任意單個字符 [^]:匹配指定范圍外的任意單個字符 字符集合--代表集合中的所有字符 Within a bracket expression, the name of a character class enclosed in "[:" and ":]" stands for the list of all characters belonging to that class. Stan‐dard character class names are: alnum digit punct alpha graph space blank lower upper cntrl print xdigit 字符集合在模式中必須為 [[:xxxx:]] 格式代表字符集中的一個 字符集合與其他字符使用時[a[:xxxx:]b] [^[:xxxx:]] [:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:] 匹配次數-----------(正則表達式工作在貪婪模式下有多長匹配多長)用在要指定其出現的次數的字符的右側,用戶限制其前面字符出現的次數。 *: 匹配其前面字符任意次--0,1或多次(可有可無或重復多次) .* 匹配任意長度的任意字符 \? 匹配其前的字符0次或1次,即前面的字符可有可無 \+ 匹配其前面的字符1次或多次,即前面的字符出現至少一次 \{m\}匹配其前面的字符m次,精確次數匹配 \{m,n\}匹配前面的字符至少m次,至少n次 \{0,n\}匹配前面的字符至多n次 \{m,\}匹配前面的字符至少m次,多了不限 位置錨定---錨定整個patter ^:行首錨定;用于模式的最左側 $:行尾錨定;用模式的最右側 ^PATTERN$:用于匹配整行 ^$:空白行錨定,沒有任意字符(包括空白字符) ^[[:space:]]*$:空白行或包含空白字符的行 單詞:非特殊字符組成的------連續字符(的字符串包括數字)都稱為單詞 \<或\b:詞首錨定,用于單詞模式的左側 \>或\b:詞尾錨定,用于單詞模式的右側 \<PATTERN\>匹配完整單詞 \bPATTERN\b 分組及引用 \(PATTER\)或\(指定的字符串\) \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理 \(xy\)*ab xy出現0次1次或多次 注:分組括號中的模式匹配到的內容,會被正則表達式引擎自動記錄于內部的變量中,這些變量為 \1 \2 \3 ...... 后向引用: grep “\(l..e\)*\1” 引用前面的分組括號中的模式所匹配到的字符
擴展正則表達式的元字符
字符匹配 .:任意單個字符 []:指定范圍內的任意單個字符 [^]:指定范圍外的任意單個字符 次數匹配 *:任意次0,1或多次 ?:0次或1次 {m}匹配其前字符m次 {m,n}:匹配其前字符最少m次,最多n次 {0,m}:匹配其前字符最多m次 {m,}:匹配最少m次 位置錨定 ^:行首錨定 $:行尾錨定 \<:詞首錨定 \>:詞尾錨定 或 a|b 整個右側或左側 C|cat C或cat (C|c)at Cat或cat 分組及引用: ():分組 后向引用: \1 \2 \3
grep
支持基本正則表達式 -E支持擴展正則表達式 -F不使用正則表達式
egrep
支持擴展正則表達式 -G支持基本正則表達式 -F不使用正則表達式
fgrep
當無需要用到元字符去編寫模式時,使用fgrep性能更好
不支持正則表達式 -E支持擴展正則表達式 -G支持基本正則表達式
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/30407