更新時間:2022年04月25日14時06分 來源:傳智教育 瀏覽次數(shù):
POSIX規(guī)范制訂了兩種標(biāo)準(zhǔn)的正則表達式語法,一種是基本正則表達式,一種擴展正則表達式。這兩中正則表達式的元字符組成略有不同。本節(jié)來學(xué)習(xí)基礎(chǔ)正則表達式元字符。
基礎(chǔ)正則表達式元字符
符號“*”用于匹配前導(dǎo)字符0次或多次,具體示例如下:
hel*o
以上示例中“*”符號之前是普通字符l,“*”符號就表示匹配l字符0次或多次,字符串helo、hello、hellllllo都可以與hel*o匹配。
符號“.”用來匹配任意除換行符“\n”外任意的單個字符。當(dāng)正則表達式中出現(xiàn)“.”符號時,意味著該位置應(yīng)有一個字符,具體示例如下:
..U73.
“.”只能匹配一個字符,因此上述字符串表示前兩個字符是任意字符,第3~5個字符是U73,最后一個字符也是任意字符。字符串MHU73、4JU73H等都可與..U73.匹配。
符號“^”用來匹配行首字符,表示行首字符是“^”后面那個字符。例如列舉出/etc目錄下以字符串“sys”開頭的文件,可以使用如下命令:
[itheima@localhost ~]$ ls /etc | grep "^sys" sysconfig sysctl.conf sysctl.d systemd system-release system-release-cpe
注意:
盡管以上示例匹配的是以字符串“sys”開頭的內(nèi)容,但讀者應(yīng)理解為匹配以字符“s”開頭,第二、第三個字符依次為“y”和“s”的行,這種理解方式更符合正則表達式的思維,。這種思維在學(xué)習(xí)正則表達式時非常重要,讀者應(yīng)熟練掌握。
行尾定位符“$”用來匹配文本行末尾的字符,與“^”符號的作用正相反。例如查找/etc目錄下以conf結(jié)尾的文件,可以使用如下命令。
[itheima@localhost ~]$ ls /etc | grep cof$ asound.conf autofs.conf autofs_ldap_auth.conf brltty.conf cgconfig.conf cgrules.conf cgsnapshot_blacklist.conf ......
同樣,讀者在理解行尾定位符的時候也應(yīng)該從字符的角度去理解,即“conf$”匹配的是以“conf”以字符“f”結(jié)尾,同時倒數(shù)第2~4個字符依次為“n”、“o”、“c”的文本行。
“[]”符號的功能比較特殊,它是用來指定一個字符集合的,其基本語法如下:
[abc]
其中a、b和c表示任意單個字符,只要某個字符串在方括號所在的位置出現(xiàn)了方括號中的任意一個字符,就能滿足匹配規(guī)則。
另外,對于連續(xù)的數(shù)字或字母可以使用符號“-”來表示一個范圍,例如[a-z],表示匹配到a到z中的任意一個字母。下面通過查看/etc目錄下以rc開頭,并且rc后面緊跟一個數(shù)字的文件有哪些來演示“[]”符號的使用,查看的命令具體如下所示:
[itheima@localhost ~]$ls /etc | grep "^rc[0-9]" rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
由輸出結(jié)果可知,符合規(guī)則的文件一共有7個。
注意:元字符“*”或“.”位于“[]”符號之中,便僅表示一個普通的字符,不再具有特殊意義。
“[^]”表示不匹配其中列出的任意字符,其語法格式如下所示。
[^abc]
它的用法與“[]”符號相反,此處不再贅述。