rhce之路 正規表示式

2021-05-23 01:06:38 字數 3274 閱讀 6813

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 匹配母音字母以...