何謂正則表達式
正則表達式,又稱正規表示法、常規表示法(Regular Expression,在代碼中常簡寫為regex、regexp或RE),是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。許多程序設計語言都支持利用正則表達式進行字符串操作。
正則表達式語言由兩種基本字符類型組成:原義(正常)文本字符和元字符。元字符使正則表達式具有處理能力。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,不表示其字面意義,而用于額外功能性描述。
正則表達式分類
正則表達式根據元字符的數量及功能不同又分為基本正則表達式(grep)和拓展正則表達式(egrep)。而grep和egrep同屬于文本搜索工具,可根據用戶指定的文本模式(搜索條件)對目標文件進行逐行搜索,顯示能匹配到的行。用法上grep –E等同于egrep,與grep和egrep相似的文本搜索工具還有fgrep,因不支持使用正則表達式,所以不再單獨介紹。
基本正則表達式(grep)
語法格式:grep[option]… ‘PATTERN’ FILE…
基本正則表達式元字符:
1.字符匹配:
.:任意單個字符 [ ]:匹配指定范圍內的任意單個字符 [0-9]:匹配單個數字 [a-z]:匹配單個小寫字母 [A-Z]:匹配單個大寫字母 [[:digit:]]:匹配單個數字 [[:lower:]]:匹配單個小寫字母 [[:upper:]]:匹配單個大寫字母 [[:space:]]:匹配單個空白字符 [[:punct:]]:匹配單個標點符號 [[:alnum:]]:匹配單個字母或數字 [[:alpha:]]:匹配單個字母(不分大小寫) [^]:匹配范圍外的任意單個字符
2.次數匹配:
*:任意次(前面字符出現任意次) \?:0次或1次(前面字符可有可無) \{m\}: m次(前面字符出現m次) \{m,n\}:至少m次,至多n次 \{m,\}:至少m次 \{0,n\}:至多n次 .*:任意長度的任意字符
3.位置錨定:
^:行首錨定(寫在模式最左側) $:行尾錨定(寫在模式最右側) ^$:空白行 \<,/b:詞首錨定(出現于單詞左側) \>,/b:詞尾錨定(出現于單詞右側) (注:不包含特殊字符的連續字符組成的串叫單詞)
4.分組
\( \):如\(ab\)* (分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之后可被引用)
5.引用
\n:引用前面的第n個左括號以及與之對應的右括號中的模式所匹配到的內容
拓展正則表達式(egrep)
語法格式:egrep [option] ‘PATTERN’ FILE…
拓展正則表達式元字符:
1.字符匹配:
.:任意單個字符 [ ]:匹配范圍內的任意單個字符 [^]:匹配范圍外的任意單個字符
2.次數匹配:
*:任意次 ?: 0或1次 +:至少1次 {m}: m次 {m,n}:至少m次,至多n次 {m,}:至少m次 {0,n}:至多n次
3.位置錨定:
^:行首錨定 $:行尾錨定 \<,\b:詞首錨定 \>,\b:詞尾錨定 ^$,^[[:space:]]*$:空白行
4.分組:
( ):分組 |:或
5.引用:
\n:引用前面的第n個左括號以及與之對應的右括號中的模式所匹配到的內容
grep及egrep命令選項
-v: 反向選取 -o:僅顯示匹配的字串,而非字串所在的行 -i:ignore-case,忽略字符大小寫 -A:顯示之前兩行 -B:顯示之后兩行 -C:顯示上下兩行
牛刀小試
顯示/proc/meminfo文件中以大寫或小寫S開頭的行
顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶
顯示/etc/passwd文件中其默認shell為/bin/bash的用戶中ID號最大的用戶
找出/etc/passwd文件中的一位數或兩位數
顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行
顯示/etc/rc.d/rc.sysinit文件中,以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行
找出netstat -tan命令執行結果中以’LISTEN’結尾的行
找出當前系統上其用戶名和默認shell相同的用戶
顯示當前系統上root或scholar用戶的默認shell
找出/etc/rc.d/init.d/functions文件中某單詞后跟一組小括號“()”行
使用echo命令輸出一個路徑,而后使用grep取出其基名
找出ifconfig命令結果中的1-255之間的數字
The End
好了總結到這里,常用的正則表達式用法就整理的差不多了,以上都是個人學習總結,如有錯漏,大
神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/1198
重點突出,分類得當,標簽精確,圖文并茂,不得不贊!
@stanley:謝大神抬愛 :roll: :roll: :roll:
@書生:hi,同學加下我qq,你文章的圖床有問題,我找不到你個人信息聯系不上你