歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Shell編程之正則表達式

  什麼是正則表達式?正則表達式是用於描述字符排列和匹配模式的一種語法規則。在很多程序設計語言中都支持利用正則表達式來進行字符串的操作,不同語言中的正則表達式略有不同,但是畢竟都是正則,其本質思想都是一致的,當我們掌握了shell中的正則後,再去看python或者perl裡面的正則表達式時,會發現其實都是一樣的東東。

  在shell的一些命令中,有些並不支持正則表達式,但是它們支持Linux裡面的通配符,那麼通配符又是什麼東東呢,它跟正則表達式又有什麼關系?

  正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令都支持正則表達式。通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配了。

  通配符主要是下面三個:

* 匹配任意字符 ? 匹配任意一個內容 [] 匹配中括號中的一個字符

 

 

 

  首先,正則表達式是用來匹配文件中文本的字符串,而通配符是用來匹配符合條件的文件名;其次正則表達式是包含匹配,只要包含正則中的字符串,就匹配,而通配符是完全匹配,也就是說,必須要與條件中的字符串一模一樣才會匹配。 

  說了這麼多,其實正則表達式主要用於字符串的模式分割匹配查找替換操作,下面來關注一下正則表達式基本的元字符和它的作用。 

元字符 作用 舉例說明 * 前一個字符匹配0次或者任意多次 "a*" 匹配所有內容,包括空白行 
"aa*" 匹配至少包含一個a的行
"aaa*" 匹配最後包含兩個連續a的字符串
"aaaaa*"匹配最少包含4個連續a的字符串 . 匹配除了換行符外的任意一個字符

"s..d" 匹配在s和d這兩個字母之間一定有兩個

字符的單詞
"s.*d" 匹配在s和d字母之間有任意字符
".*" 匹配所有內容

^ 匹配行首 "^hello" 匹配以hello開頭的行
"^M" 匹配以大寫“M”開頭的行 $ 匹配行尾 "hello$" 匹配以hello結尾的行 
"n$" 匹配以小寫“n”結尾的行
"^$" 匹配空白行 [] 匹配中括號中指定的任意一個字符,只匹配一
個字符

"[aeiou]" 匹配任意一個元音字母,
"[0-9]" 匹配任意一位數字,
"[a-z][0-9]" 匹配小寫字母和一位數字構成的

兩位字符。
"s[ao]id" 匹配s和i字母中,要麼是a,要麼是o

"[0-9]"  匹配任意一個數字

"^[a-z]" 匹配小寫字母開頭的行

[^] 匹配中括號的字符以外的任意一個字符 "[^0-9]" 匹配任意一位非數字字符,
"[^a-z]" 表示任意一位非小寫字母
"^[^a-z]"  匹配不是小寫字母開頭的行
"^[^a-zA-Z]" 匹配不是字母開頭的行 \ 轉義符。用於將特殊符號的含義取消 "\.$" 匹配使用"."結尾的行 \{n\} 表示其前面的字符恰好出現n次 "[0-9]\{4\}" 匹配4位數字,
"[1][3-8][0-9]\{9\}" 匹配手機號碼
"a\{3\}"  匹配a字母連續出現3次的字符串
"[0-9]\{3\}" 匹配包含連續的3個數字的字符串 \{n,\} 表示其前面的字符出現不小於n次

"[0-9]\{2,\}" 表示兩位及以上的數字。
"[0-9]\{3,\}[a-z]" 匹配最少用連續3個數字開頭

的字符串

\{n,m\} 表示其前面的字符至少出現n次,最多出現
m次

"[a-z]\{6,8\}" 匹配6到8位的小寫字母。
"sa\{1,3\}i" 匹配在字母s和i直接有最少一個a,

最多三個a

 

  下面舉幾個個簡單的列子:

  (1)匹配日期格式YYYY-MM-DD     "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" 
  (2)匹配IP地址XXX.XXX.XXX       "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" 

  (3)匹配騰訊QQ號碼           "[1-9][0-9]\{4,9\}"

Linux正則表達式sed 詳述  http://www.linuxidc.com/Linux/2015-04/116309.htm

Linux正則表達式特性及BRE與ERE的區別 http://www.linuxidc.com/Linux/2014-03/99152.htm

grep使用簡明及正則表達式 http://www.linuxidc.com/Linux/2013-08/88534.htm

正則表達式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm

正則表達式之零寬斷言 http://www.linuxidc.com/Linux/2013-03/81897.htm

Linux中正則表達式與文件格式化處理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm

基礎正則表達式 http://www.linuxidc.com/Linux/2014-09/106296.htm

常用正則表達式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm

Copyright © Linux教程網 All Rights Reserved