您好,登錄后才能下訂單哦!
何謂正則表達(dá)式
正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法(Regular Expression,在代碼中常簡寫為regex、regexp或RE),是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達(dá)控制或通配等功能。正則表達(dá)式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個模式的文本。許多程序設(shè)計語言都支持利用正則表達(dá)式進(jìn)行字符串操作。
正則表達(dá)式語言由兩種基本字符類型組成:原義(正常)文本字符和元字符。元字符使正則表達(dá)式具有處理能力。所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專用字符,不表示其字面意義,而用于額外功能性描述。
正則表達(dá)式分類
正則表達(dá)式根據(jù)元字符的數(shù)量及功能不同又分為基本正則表達(dá)式(grep)和拓展正則表達(dá)式(egrep)。而grep和egrep同屬于文本搜索工具,可根據(jù)用戶指定的文本模式(搜索條件)對目標(biāo)文件進(jìn)行逐行搜索,顯示能匹配到的行。用法上grep –E等同于egrep,與grep和egrep相似的文本搜索工具還有fgrep,因不支持使用正則表達(dá)式,所以不再單獨(dú)介紹。
基本正則表達(dá)式(grep)
語法格式:grep[option]... 'PATTERN' FILE...
基本正則表達(dá)式元字符:
1.字符匹配:
.:任意單個字符[ ]:匹配指定范圍內(nèi)的任意單個字符
[0-9]:匹配單個數(shù)字
[a-z]:匹配單個小寫字母
[A-Z]:匹配單個大寫字母
[[:digit:]]:匹配單個數(shù)字
[[:lower:]]:匹配單個小寫字母
[[:upper:]]:匹配單個大寫字母
[[:space:]]:匹配單個空白字符
[[:punct:]]:匹配單個標(biāo)點(diǎn)符號
[[:alnum:]]:匹配單個字母或數(shù)字
[[:alpha:]]:匹配單個字母(不分大小寫)
[^]:匹配范圍外的任意單個字符
2.次數(shù)匹配:
*:任意次(前面字符出現(xiàn)任意次)
\?:0次或1次(前面字符可有可無)
\{m\}: m次(前面字符出現(xiàn)m次)
\{m,n\}:至少m次,至多n次
\{m,\}:至少m次
\{0,n\}:至多n次
.*:任意長度的任意字符
3.位置錨定:
^:行首錨定(寫在模式最左側(cè))
$:行尾錨定(寫在模式最右側(cè))
^$:空白行
\<,/b:詞首錨定(出現(xiàn)于單詞左側(cè))
\>,/b:詞尾錨定(出現(xiàn)于單詞右側(cè))
(注:不包含特殊字符的連續(xù)字符組成的串叫單詞)
4.分組
\( \):如\(ab\)*
(分組中的模式匹配到的內(nèi)容,可由正則表達(dá)式引擎記憶在內(nèi)存中,之后可被引用)
5.引用
\n:引用前面的第n個左括號以及與之對應(yīng)的右括號中的模式所匹配到的內(nèi)容
拓展正則表達(dá)式(egrep)
語法格式:egrep [option] 'PATTERN' FILE...
拓展正則表達(dá)式元字符:
1.字符匹配:
.:任意單個字符
[ ]:匹配范圍內(nèi)的任意單個字符
[^]:匹配范圍外的任意單個字符
2.次數(shù)匹配:
*:任意次
?: 0或1次
+:至少1次
{m}: m次
{m,n}:至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
3.位置錨定:
^:行首錨定
$:行尾錨定
\<,\b:詞首錨定
\>,\b:詞尾錨定
^$,^[[:space:]]*$:空白行
4.分組:
( ):分組
|:或
5.引用:
\n:引用前面的第n個左括號以及與之對應(yīng)的右括號中的模式所匹配到的內(nèi)容
grep及egrep命令選項(xiàng)
-v: 反向選取
-o:僅顯示匹配的字串,而非字串所在的行
-i:ignore-case,忽略字符大小寫
-A:顯示之后兩行
-B:顯示之前兩行
-C:顯示上下兩行
牛刀小試
顯示/proc/meminfo文件中以大寫或小寫S開頭的行
顯示/etc/passwd文件中其默認(rèn)shell為非/sbin/nologin的用戶
顯示/etc/passwd文件中其默認(rèn)shell為/bin/bash的用戶中ID號最大的用戶
找出/etc/passwd文件中的一位數(shù)或兩位數(shù)
顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行
顯示/etc/rc.d/rc.sysinit文件中,以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行
找出netstat -tan命令執(zhí)行結(jié)果中以'LISTEN'結(jié)尾的行
找出當(dāng)前系統(tǒng)上其用戶名和默認(rèn)shell相同的用戶
顯示當(dāng)前系統(tǒng)上root或scholar用戶的默認(rèn)shell
找出/etc/rc.d/init.d/functions文件中某單詞后跟一組小括號“()”行
使用echo命令輸出一個路徑,而后使用grep取出其基名
找出ifconfig命令結(jié)果中的1-255之間的數(shù)字
The End
好了總結(jié)到這里,常用的正則表達(dá)式用法就整理的差不多了,以上都是個人學(xué)習(xí)總結(jié),如有錯漏,大
神勿噴~~~
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。