linux基礎教程之正則表達式小白讀本
概念
正則表達式是對字符串操作的一種邏輯表達方式,很多情況下我們需要在茫眾多的文件中找到我們需要的文件時,就需要用到正則表達式了
正則表達式就如同一個過濾器,能夠篩選出希望得到的字符串。它可以檢索、替換符合我們自己規定格式的所有文本。
- 正則表達式分兩類:
- 基本正則表達式
-
擴展正則表達式
正則表達式的用法和選項
在Linux中,正則表達式通常會配合文本過濾工具grep使用。
- grep的功能強大,且簡單粗暴。
以/etc目錄為例
我們用grep來篩選一下其中含有”li”的文件
這是利用grep在/etc中對字母”li”進行篩選
如果我們只想要以”li”為首字母的文件要怎么做呢?
這就需要用到正則表達式了
可以看到依靠正則表達式能很輕松的達到我們想要的結果。
正則表達式還有更多更強大的功能,讓我們來了解一下吧。
- 正則表達式
正則表達式的元字符分類:匹配字符、匹配字數、位置錨定、分組-
- 字符匹配:
匹配任意單個字符 [] 匹配指定范圍內的任意單個字符 [^] 匹配指定范圍外的任意單個字符 [[:alnum:]] 字母和數字 [[:alpha:]] 代表任何英文大小寫字符,亦即 A-Z, a-z [[:lower:]] 小寫字母 [[:upper:]] 大寫字母 [[:blank:]] 空白字符(空格和制表符) [[:digit:]] 十進制數字 [[:xdigit:]] 十六進制數字 [[:graph:]] 可打印的非空白字符 [[:print:]] 可打印字符 [[:punct:]] 標點符號
- 字符匹配:
-
- 匹配字數(””為轉譯符,防止系統將某些字符當命令處理)
* 匹配前面的字符任意次,包括0次 + 匹配前面的字符1次以上,不包括0次 *? 匹配前面任意次,但盡可能少重復 .* 任意長度的任意字符 ? 匹配其前面的字符0或1次 + 匹配其前面的字符至少1次 {n} 匹配前面的字符n次 {m,n} 匹配前面的字符至少m次,至多n次 {,n} 匹配前面的字符至多n次 {n,} 匹配前面的字符至少n次
- 匹配字數(””為轉譯符,防止系統將某些字符當命令處理)
-
- 位置錨定 :
^ 行首錨定,用于模式的最左側 $ 行尾錨定,用于模式的最右側 < 或 b 詞首錨定,用于單詞模式的左側 > 或 b 詞尾錨定;用于單詞模式的右側 <PATTERN> 匹配整個單詞
- 分組
分組 : () 將一個或多個字符捆綁在一起,當作一個整體進行處理,如 : (root)+
后向引用 : 引用前面的分組括號中的模式所匹配字符,而非模式本身
或者 : |
- 位置錨定 :
-
- 擴展正則表達式
擴展正則表達式是正則表達式的優化版,元字符的表達更簡潔,更方便。
在grep中需要加選項 “-e” 來啟用擴展正則表達式或egrep(=grep -e)- 在字符匹配中的雙中括號在擴展正則表達式中可以簡寫為一個
[ : alnum : ] 字母和數字 [ : alpha : ] 代表任何英文大小寫字符,亦即 A-Z, a-z [ : lower : ] 小寫字母 [ : upper : ] 大寫字母 [ : blank : ] 空白字符(空格和制表符) [ : digit : ] 十進制數字 [ : xdigit : ] 十六進制數字 [ : graph : ] 可打印的非空白字符 [ : print : ] 可打印字符 [ : punct : ] 標點符號
- 大部分轉譯符()可以省略?:
*: 匹配前面字符任意次 ? : 0或1次 +: 1次或多次 {m} : 匹配m次 {m,n} : 至少m,至多n次 a|b : a或b C|cat : C或cat (C|c)at : Cat或cat
- 在字符匹配中的雙中括號在擴展正則表達式中可以簡寫為一個
總結
正則表達式的功能很強大且很好用,理解上也可能對于字符表達的含義會有些混亂需要多用多記才能熟練掌握。