1. 程式人生 > >Linux中grep命令,用或的關係查詢多個字串,正則表示式基礎說明

Linux中grep命令,用或的關係查詢多個字串,正則表示式基礎說明

使用 grep 'word1|word2' 檔名  這樣的命令是不對的!


應該使用如下的命令:

1,grep -E 'word1|word2' 檔名

2,egrep 'word1|word2' 檔名

3,grep 'word1/|word2' 檔名


為什麼需要加-E,關於grep 和 egrep:


egrep 等同於 grep -E 。它會以擴充套件的正則表示式的模式來解釋模式。下面來自 grep 的幫助頁:
基本的正則表示式元字元 ?、+、 {、 |、 ( 和 ) 已經失去了它們原來的意義,要使用的話用反斜線的版本 /?、/+、/{、/|、/( 和 /) 來代替。 傳統的 egrep 並不支援 { 元字元,一些 egrep 的實現是以 /{ 替代的,所以一個可移植的指令碼應該避免在 grep -E 使用 { 符號,要匹配字面的 { 應該使用 [}]。
GNU grep -E 試圖支援傳統的用法,如果 { 出在在無效的間隔規範字符串這前,它就會假定 { 不是特殊字元。
例如,grep -E ‘{1′ 命令搜尋包含 {1 兩個字元的串,而不會報出正則表示式語法錯誤。

POSIX.2 標準允許這種操作的擴充套件,但在可移植指令碼檔案裡應該避免這樣使用。

關於正則表示式的基本分類:

1、基本的正則表示式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs) 
2、擴充套件的正則表示式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs) 
3、Perl 的正則表示式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs) 

關於基本正則表示式和擴充套件正則表示式的一些用法:

基本正則表示式

元資料

意義和範例

^word

搜尋以word開頭的行。

例如:搜尋以#開頭的指令碼註釋行

grep –n ‘^#’ regular.txt

word$

搜尋以word結束的行

例如,搜尋以‘.’結束的行

grep –n ‘.$’ regular.txt

.

匹配任意一個字元。

例如:grep –n ‘e.e’ regular.txt

匹配ee之間有任意一個字元,可以匹配eeeeaeeve,但是不匹配ee

\

轉義字元。

例如:搜尋是一個特殊字元,在正則表示式中有特殊含義。必須要先轉義。

grep –n ‘\” regular.txt

*

前面的字元重複0到多次。

例如匹配glegoglegooglegooogle等等

grep –n ‘go*gle’ regular.txt

[list]

匹配一系列字元中的一個。

例如:匹配glgf

grep –n ‘g[lf]’ regular.txt

[n1-n2]

匹配一個字元範圍中的一個字元。

例如:匹配數字字元

grep –n ‘[0-9]’ regular.txt

[^list]

匹配字符集以外的字元

例如:grep –n ‘[^o]‘ regular.txt

匹配非o字元

\{n1,n2\}

前面的字元重複n1n2

例如:匹配googlegooogle

grep –n ‘go\{2,3\}gle’ regular.txt

\<word

單詞是的開頭。

例如:匹配以g開頭的單詞

grep –n ‘\<g’ regular.txt

word\>

匹配單詞結尾

例如:匹配以tion結尾的單詞

grep –n ‘tion\>’ regular.txt

擴充套件正則表示式

     grep一般情況下支援基本正則表示式,可以通過引數-E支援擴充套件正則表示式,另外grep單獨提供了一個擴充套件命令叫做egrep用來支援擴充套件正則表示式,這條命令和grep -E等價。雖然一般情況下,基本正則表示式就夠用了。特殊情況下,複雜的擴充套件表示式,可以簡化字串的匹配。

擴充套件正則表示式就是在基本正則表示式的基礎上,增加了一些元資料。

元資料

意義和範例

+

重複前面字元1到多次。

例如:匹配godgoodgoood等等字串。

grep –nE go+d’ regular.txt

?

匹配01次前面的字元

例如,匹配gdgod

grep –nE ‘go?d’ regular.txt

|

或(or)的方式匹配多個字串例如:grep –nE ‘god|good’ regular.txt

匹配god或者good

()

匹配整個括號內的字串,原來都是匹配單個字元

例如:搜尋good或者glad

grep –nE ‘g(oo|la)’ regular.txt

()

前面的字元重複0到多次。

例如匹配glegoglegooglegooogle等等

grep –nE ‘go*gle’ regular.txt