什麼是正則表達式?
我理解的正則表達式就是用來匹配字符串的一種方法。通過一種規則去幫助用戶更快捷的達到查找的目的。
對於系統管理員來說,正則表達式是非常重要的。因爲在系統每天都會產生相當多的信息,比如系統的日誌文件中記錄了很多系統產生的相關信息,如果去查看那麼多的信息是相關費時的,而正則表達式則可以用來查詢我們需要的信息,過濾掉那些不需要的信息,從而方便我們處理。
正則表達式分爲幾種,常用的是:
Basic REGEXP: 基本正則表達式
Extended REGEXP:擴展正則表達式
字符集合表示方式:
[[:lower:]] | 所有的小寫字母; |
[[:upper:]] | 所有的大寫字母; |
[[:alpha:]] | 所有的字母; |
[[:digit:]] | 所有數字; |
[[:alnum:]] | 所有的字母和數字; |
[[:punct:]] | 所有的標點符號; |
[[:space:]] | 所有的空白字符; |
[^[:lower:]]: | 除了小寫字母 |
grep:基本正則表達式
使用基本正則表達式定義的模式來過濾文本的命令,貪婪模式(儘可能長的去匹配)
部分匹配,顯示整行
-i:忽略大小寫
-o : 只顯示被匹配的字符串
--color:把匹配到的高亮
可用 alias grep='grep --color' 設置grep別名
-v:顯示沒有匹配到的行
-n:在顯示匹配文本的那一列之前標示出該列的是多少列
-E:使用擴展表達式
字符匹配:
. :匹配任意單個字符
[] : 匹配指定單個字符
[^] : 匹配指定範圍外的單個字符
次數匹配:
* : 匹配其前面的字符任意次,可以0次
\? : 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符最少m次,最多n次
例如\{2\}匹配其前面的字符最少2次,最多無上限,無上限時n可省略
\{0,2\}匹配其前面的字符最少0次,最多2次,m不可省略
.* : 任意長度的任意字符
錨定:
^:其後面的字符錨定行首
$:其後面的字符錨定行尾
^PATTERN$ 用模式匹配整行
例^ab.*c$ 以ab開頭中間有任意並以c結尾的行
^$ 匹配空白行
^[[:space:]]$ Tab鍵也算space 匹配完全空白行
\<:其後面的字符錨定單詞首部 [ \b.*\b ==\<.*>\ 但 \> 不等於 \b ]
\>:其後面的字符錨定單詞尾部
\(\) : 分組,例\(ab\) 用於反向引用 子表達式 \1,\2,\3….
在子表達式中(a.b).*\1 表示匹配第一個子表達式匹配到的字符
例 amb hello anb 不匹配
amb hello amb 匹配
eqrep:擴展正則表達式
字符匹配:(與grep一致)
. :匹配任意單個字符
[] : 匹配指定單個字符
[^] : 匹配指定範圍外的單個字符
次數匹配:
* : 匹配其前面的字符任意次,可以0次
? : 匹配其前面的字符1次或0次(相比grep不用加\)
+ : 匹配其前面的字符至少1次(?+ = grep的*)
{m,n} :匹配其前面的字符最少m次,最多n次(相比grep不用加\)
錨定:
^:其後面的字符錨定行首
$:其後面的字符錨定行尾
\< :其後面的字符錨定單詞首部
\> :其前面的字符錨定單詞尾部
(): 分組, 用於反向引用 子表達式 \1,\2,\3….
|:或者,例 a|b 表示 a或者b
C|cat 表示 C或者cat
(C|c)at 表示 Cat或者cat