什麼是正則表達式?正則表達式是用於描述字符排列和匹配模式的一種語法規則。在很多程序設計語言中都支持利用正則表達式來進行字符串的操作,不同語言中的正則表達式略有不同,但是畢竟都是正則,其本質思想都是一致的,當我們掌握了shell中的正則後,再去看python或者perl裡面的正則表達式時,會發現其實都是一樣的東東。
在shell的一些命令中,有些並不支持正則表達式,但是它們支持Linux裡面的通配符,那麼通配符又是什麼東東呢,它跟正則表達式又有什麼關系?
正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令都支持正則表達式。通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配了。
通配符主要是下面三個:
首先,正則表達式是用來匹配文件中文本的字符串,而通配符是用來匹配符合條件的文件名;其次正則表達式是包含匹配,只要包含正則中的字符串,就匹配,而通配符是完全匹配,也就是說,必須要與條件中的字符串一模一樣才會匹配。
說了這麼多,其實正則表達式主要用於字符串的模式分割、匹配、查找及替換操作,下面來關注一下正則表達式基本的元字符和它的作用。
"s..d" 匹配在s和d這兩個字母之間一定有兩個
字符的單詞
"s.*d" 匹配在s和d字母之間有任意字符
".*" 匹配所有內容
"[aeiou]" 匹配任意一個元音字母,
"[0-9]" 匹配任意一位數字,
"[a-z][0-9]" 匹配小寫字母和一位數字構成的
兩位字符。
"s[ao]id" 匹配s和i字母中,要麼是a,要麼是o
"[0-9]" 匹配任意一個數字
"^[a-z]" 匹配小寫字母開頭的行
[^] 匹配中括號的字符以外的任意一個字符 "[^0-9]" 匹配任意一位非數字字符,"[0-9]\{2,\}" 表示兩位及以上的數字。
"[0-9]\{3,\}[a-z]" 匹配最少用連續3個數字開頭
的字符串
\{n,m\} 表示其前面的字符至少出現n次,最多出現"[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