1、正則表達(dá)式和通配符有點(diǎn)像。區(qū)別在于通配符匹配的是文件名和目錄名中的字符串,不能匹配文本中內(nèi)容的字符串。而正則表達(dá)式匹配的是文本中的字符串。
2、正則表達(dá)式(REGEXP):由一類(lèi)特殊字符及文本符號(hào)所編寫(xiě)的表達(dá)式,這種表達(dá)式的功能是匹配文本當(dāng)中字符串。
3、正則表達(dá)式的特點(diǎn):可以通過(guò)特殊字符及文本符號(hào)靈活組合各種過(guò)濾條件去匹配文本內(nèi)容,從而達(dá)到自由度頗高的篩查方式。
4、正則表達(dá)式分兩類(lèi):基本正則表達(dá)式(BRE)、擴(kuò)展正則表達(dá)式(ERE),grep 加上 -E 參數(shù)就是使用 egrep。
5、元字符分類(lèi):元字符是指正則表達(dá)式中使用的特殊字符,這些特殊符號(hào)具有特定的功能。從功能上分類(lèi)有:字符匹配、匹配次數(shù)、位置錨定、分組。
- 字符匹配:
①、 .:匹配任意單個(gè)字符。
②、 [ ]:匹配指定范圍內(nèi)的任意單個(gè)字符。
③、 [^]:排除匹配指定范圍內(nèi)的任意單個(gè)字符。
④、 [:alnum:]:字母和數(shù)字。
⑤、 [:alpha:]:任何英文大小寫(xiě)字符,即 A-Z,a-z。
⑥、 [:lower:]:小寫(xiě)字母。
⑦、 [:upper:]:大寫(xiě)字母。
⑧、 [:blank:]:空白字符(空格和制表符)。
⑨、 [:space:]:水平和垂直的空白字符(比 [:blank:] 包含的范圍廣)。
⑩、 [:cntrl:]:不打印的控制字符(退格、刪除...)。
⑩-①、 [:digit:]:十進(jìn)制數(shù)字。
⑩-②、 [:xdigit]:十六進(jìn)制數(shù)字。
⑩-③、 [:graph:]:可打印的非空白字符。
⑩-④、 [:print:]:可打印字符。
⑩-⑤、 [:punct:]:標(biāo)點(diǎn)符號(hào)。
①、 .:匹配任意單個(gè)字符。
- 創(chuàng)建一個(gè)文檔 regexpTest.txt 。
[root@localhost ~]# vim regexpTest.txt
abc
abbc
abbbc
a.c
a/c
aabcd
aabbcc
~
~
~
:wq ## 保存退出
- "a.c":表示過(guò)濾 a 與 c 之間夾著一位任意字符的字符串。

- "a..c":表示過(guò)濾 a 與 c 之間夾著兩位任意一位字符的字符串。

- 漢字也算一個(gè)字符,( . )代表任意字符。
[root@localhost ~]# vim regexpTest.txt ## regexpTest.txt 添加新內(nèi)容
abc
abbc
abbbc
a.c
a/c
aabcd
aabbcc
a我c ## 新字符串
~
~
~
:wq

- "...":表示過(guò)濾包含三位的字符串。
- regexpTest.txt 新增點(diǎn)內(nèi)容。
[root@localhost ~]# vim regexpTest.txt ## regexpTest.txt 添加新內(nèi)容
abc
abbc
abbbc
a.c
a/c
aabcd
aabbcc
a我c
a ## 新增的內(nèi)容
ab ## 新增的內(nèi)容
~
~
~
:wq ## 保存退出
- 從輸出結(jié)果可以看出不只是過(guò)濾出三位的字符串,而是三位以上的字符串都過(guò)濾出來(lái)了。這是 grep 默認(rèn)的特性貪婪模式,盡可能的匹配滿足的長(zhǎng)度。

- "a...":表示過(guò)濾包含 a 開(kāi)頭,后面三位任意的字符。

- "..c":表示過(guò)濾包含 c 結(jié)尾,前面有兩位任意的字符。

- "a \ .c":\ 轉(zhuǎn)義字符,轉(zhuǎn)義之后的。就是 . 本身的含義。不是正則表達(dá)式 . 任意單個(gè)字符的意思。所以,"a \ .c" 就是過(guò)濾出 a.c 的字符串。


②、 [ ]:匹配指定范圍內(nèi)的任意單個(gè)字符。
- "a[qwer我].":a 開(kāi)頭,第二位 [qwer我] 中括號(hào)的內(nèi)容匹配文本中的字符串第二位,第三位 . 代表任意字符的意思。如果文本中的字符串有 a 開(kāi)頭,第二位也符合 q、w、e、r、我、的任意一個(gè)字符,而且滿足三位的條件,就會(huì)打印出來(lái)。


③、 [^]:排除匹配指定范圍內(nèi)的任意單個(gè)字符。
- "a[^abc]":a 開(kāi)頭,第二位 [^abc] 中括號(hào)的內(nèi)容取反,即排除掉。除了中括號(hào)內(nèi)的 a、b、c 字符,匹配其他字符都可以過(guò)濾出結(jié)果。

④、 [:alnum:]:過(guò)濾字母和數(shù)字,包含了大寫(xiě)字母、小寫(xiě)字母 和 10個(gè)數(shù)字(0-9)。
- 更新以下 regexpTest.txt 內(nèi)容
[root@localhost ~]# vim regexpTest.txt
---------
loginTest
---------
sn:888888
---------
~
~
~
:wq
- 由于 [:alunm:] 包含了大寫(xiě)字母、小寫(xiě)字母 和 10個(gè)數(shù)字(0-9)。當(dāng)用 [ ] 中括號(hào)包含 [:alnum:] 就相當(dāng)于大寫(xiě)字母、小寫(xiě)字母 和 10個(gè)數(shù)字(0-9)匹配文本中的內(nèi)容。但凡符合要求的都會(huì)標(biāo)紅顯示出來(lái)。

- 更改一下 regexpTest.txt 內(nèi)容,加入一些中文看看 [:alnum:] 過(guò)濾的效果如何?
[root@localhost ~]# vim regexpTest.txt
----------
登錄測(cè)試:
Test
----------
測(cè)試密碼:
888888
----------
~
~
~
:wq
- 從輸出效果看,[:alnum:] 也可以輸出中文。

- [:alnum:] 也可以匹配指定范圍的內(nèi)容。例如過(guò)略 T 開(kāi)頭,第二位任意小寫(xiě)字母的內(nèi)容。
T[a-z]:T 開(kāi)頭,第二位 a-z 任意小寫(xiě)字母作為過(guò)濾條件。
T[[:alnum:]]:T 開(kāi)頭,第二位 A-Z 大寫(xiě)字母、a-z 小寫(xiě)字母 和 10個(gè)數(shù)字(0-9)作為過(guò)濾條件。

- 當(dāng)然 [:alnum:] 作為一個(gè) A-Z 大寫(xiě)字母、a-z 小寫(xiě)字母 和 10個(gè)數(shù)字(0-9)的過(guò)濾條件范圍有點(diǎn)大。第二位只要符合大寫(xiě)、小寫(xiě) 和 數(shù)字范圍的字符都會(huì)被過(guò)濾出來(lái)。

- 單純想過(guò)略 T 開(kāi)頭,第二位為任意小寫(xiě)字母的時(shí)候,用 [:alnum:] 顯然不合適。這里只是想記錄一下 [:alnum:] 這類(lèi)特殊字符本意上類(lèi)似數(shù)據(jù)的集合供使用者方便使用 和 寫(xiě)法上加了 [ ] 中括號(hào)的意思。
⑤、 [:alpha:]:任何英文大小寫(xiě)字符,即 A-Z,a-z。
- 更改一下 regexpTest.txt 內(nèi)容。
[root@localhost ~]# vim regexpTest.txt
------------
大寫(xiě)英文:
ABC
------------
小寫(xiě)英文:
abc
------------
~
~
~
:wq

- [:alpha:] 匹配英文大小寫(xiě)字符,即 A-Z,a-z

⑥、 [:lower:]:只過(guò)濾小寫(xiě)字母。

⑦、 [:upper:]:只過(guò)濾大寫(xiě)字母。

⑧、 [:blank:]:空白字符(空格和制表符)。
- 更改一下 regexpTest.txt 內(nèi)容。
[root@localhost ~]# vim regexpTest.txt
------------
空格(space): this's space.
------------
制表符(tab): this's tab.
------------
~
~
~
:wq
- 在輸出中用鼠標(biāo)括住輸出內(nèi)容就可以看到標(biāo)紅的部分,分別是 空格space 和 制表符 tab。

⑨、 [:space:]:水平和垂直的空白字符(比 [:blank:] 包含的范圍廣)。
[root@localhost ~]# vim regexpTest.txt
----------
登錄測(cè)試: Test ## <--- Test 前面有 2 個(gè) tab
----------
測(cè)試密碼: 888888 ## <--- Test 前面有 1 個(gè) tab
---------- ## <--- 這里結(jié)尾有 1 個(gè)空格
~
~
~
:wq
- 通過(guò) [:space:] 可以看到過(guò)濾出 regexpTest.txt 文件中的空白字符。

⑩-①、 [:digit:]:十進(jìn)制數(shù)字。

⑩-③、 [:graph:]:可打印的非空白字符。

⑩-④、 [:print:]:可打印字符。相當(dāng)于 [:alnum:]、[:punct:] 和 space。
- 從輸出效果看出 [:print:] 可以過(guò)濾中文、大小寫(xiě)英文、數(shù)字、標(biāo)點(diǎn) 和 空格。但是不能過(guò)濾 tab。

⑩-⑤、 [:punct:]:標(biāo)點(diǎn)符號(hào)。
[root@localhost ~]# vim regexpTest.txt
----------
登錄測(cè)試:
Test
----------
測(cè)試密碼:
888888
----------
符號(hào)測(cè)試
----------
` ~ ! @ # $ % ^ & * ( ) _ - + = \ | [ ] { } ; ' : " , . / < > ?
----------
~
~
~
:wq
