1.什麼是正規表示式?
要想管理好主機,任何一名有經驗的系統管理員都會告訴你,「正規表示式很重要」。為什麼重要呢?因為在日常的管理主機的過程中,
主要的就是處理文字字元,而正規表示式恰恰是處理文字所離不開的工具。
總之,正規表示式就是處理字串的方法,以行為單位進行字串的處理,通過一些特殊符號的輔助,可以讓使用者輕鬆的處理文字。
對於一般使用者而言,使用正規表示式的機會不多,不過,要想成為一名系統管理員,正規表示式則是不可不學的。原因是,在於,系統每天產生的的資訊會多到你無法想像。
由於系統的資料量太大,要系統管理員每天去看這麼多資訊,真的很不現實,從千百行中找出有問題的行進行處理,才是明智的做法,這個時候,就不得不用到正規表示式了。如此一來,管理員的工作將會很輕鬆了,當然正規表示式的用處還不至於此,深入了解後,你會愛上它的。
正規表示式分為兩種,一種是基礎的正規表示式,一種是擴充套件的正規表示式。
下面我們就介紹這兩種正規表示式。
一:基礎的正規表示式。
正規表示式是處理字串的標準方式,它需要有支援的工具程式來輔助,所以,這裡先介紹乙個簡單的命令grep。在介紹完後,再講講表示式的字串處理能力。
先了解一下grep的語法。
grep [-acinv] '搜尋字串' filename
引數說明:
-a :在二進位制檔案中,以文字方式搜尋資料。
-c :計算找到『搜尋字串』的次數。
-i :忽略大小寫的不同,所以大小寫視為相同。
-n :輸出行號。
-v :反向選擇,即顯示出沒有 『搜尋字串』的那些行顯示出來。
如#grep -v 'root' /var/log/secure
將/var/log/secure下的沒有root的那些行顯示出來
#grep 'root' /var/log/secure
將/var/log/secure下有root的那些行顯示出來
下面來結合grep講講正規表示式。
grep是很常用的命令,它最重要的功能就是進行字串的比較,然後將符合使用者需要的字串列印出來。grep在資料中查詢乙個字串時是以「行」為單位進行資料的選取的。只有滿足條件的行才被顯示出來,不滿足的就不會顯示出來 。
1。搜尋特定字串
如#grep -n 'the' myfile.txt
在myfile.txt 中查詢 the 單詞,並顯示出是第幾行。
#grep -vn 'the' myfile.txt
在myfile.txt中查詢 the 單詞,顯示出沒有the 的行,並顯示出是第幾行
#grep -in 'the' myfile.txt
不考慮the的大小寫,大寫和小寫都是同等的,並顯示出有the的行,列印出是第幾行
2.利用[ ]來搜尋集合字元
如果要搜尋test和taste這兩個單詞時,可以發現,它們有共同的部分,就是『t?st』,這個時候,我們可以這樣搜尋
#grep -n 't[ae]st' myfile.txt
其實,,[ ]裡論有幾個字元,都只代表乙個字元,所以,上面的例子說明了我們只需要tast或test 兩個字串
如果想要搜尋有aa的字元,可以用下面方法
#grep -n 'aa' myfile.txt
但是如果不想aa前面有c,可以用集合字元的反向選擇[^]來實現:
#grep -n '[^c]aa' myfile.txt
當然裡面還可以連寫,如abc前面只能出現小寫字母。
#grep -n '[a-z]abc' myfile.txt
3.行首與行尾字元 ^ $
#grep -n '^the' myfile.txt
查詢一行字串裡有the,讓the只出現在行首
#grep -n 'the$' myfile.txt
查詢一行字串裡有the,讓the只出現在行尾
還有一點就是空白行怎麼表示?
如果想找出哪一行是空白行,怎麼找?如下
grep -n '^$' myfile.txt
剛出現就結束了,所以,空白行這樣表示: ^$
4.任意乙個字元(.)與重複字元(*)
. 表示擁有乙個字元
假設找出開頭是g,結尾是d,共有5個字元,如下
#grep -n 'g...d' myfile.txt
* 表示重複0個或多個前面的字元。
#grep -n 'go*' myfile.txt
表示o 可有可無,但g必須要有。go,goo,gd都滿足此條件
記住,* 重複前面的字元,0次或多次。
有一點注意了。. 表示乙個字元,*表示0個或多個字元,所有, .* 表示0個或多個任意字元。
5.限定連續重複的範圍 {}
如果想限制乙個範圍內的重複字元數,可以用{} ,但是 {} 和 } 的符號在shell中有特殊的意義,
因此必須要使用轉義字元 / 讓它推動特殊意義。
{} 的語法如下:
#grep -n 'a/' myfile.txt
找到兩個連續的a的字串
#grep -n 'ga/g' myfile.txt
找到以g開頭,以一結尾,中間有2到5個a的字串
#grep -n 'ga/g' myfile.txt
找到以g開頭,以g結尾,中間有2個以上的a的字串
綜上所述,可以總結出以下的重要特殊字元。
^ 行首
$ 行尾
. 乙個字元
/ 轉義字元
* 重複前面的0個或多個字元
/ 重複前面乙個字元n到m次
/ 重複前面乙個字元到少n次
/ 重複前面乙個字元n次
指定範圍內的乙個
[^] 反向選擇指定範圍內的乙個
二。擴充套件正規表示式。
事實上,一般使用者只需了解基礎正規表示式就足夠了,不過,有時為了簡化整個命令操作
,了解使用範圍更廣的擴充套件正規表示式會更方便
使用支援擴充套件開支正規表示式的egrep與特殊字元 | 來分隔兩組字串,會方便很多。
這裡必須特別強調,grep支援基礎正規表示式,而 egrep支援擴充套件正規表示式,熟悉了
基礎正規表示式後,擴充套件的正規表示式只是多了幾個重要的特殊的符號。如下
+ 重複乙個或乙個以上的字元
? 0個或乙個字元
| 用或(or)的方式找出數個字串
() 找出使用者組的字串
這就是擴充套件正規表示式的特殊字元。
在了解一些正規表示式後,再了解sed和awk兩個工具,它們相當有用,此作為後續課程介紹。今天就說到這吧
python之路 正規表示式
正規表示式 是乙個字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配,它的設計思想是用一種描述性的語言來給字串定義乙個滾則,凡是符合規則的字串,我們就認為它 匹配了 否則,該字串就是 不合法的 在python中使用正規表示式匯入,import re 模組 re的匹配語法有以下幾種 1 re.ma...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
學習之路 正規表示式 上
語法說明 重複0次或更多次 重複一次或更多次 重複零次或一次 重複n次 重複n次或更多次 重複n到m次 語法 說明 w 匹配任意不是字母 數字 下劃線 漢字的字元 s匹配任意不是空白符的字元 d匹配任意非數字的字元 b匹配不是單詞開頭或結尾的位置 x 匹配x以外的任意字元 aeiou 匹配母音字母以...