一、正規表示式
正規表示式描述了乙個字串匹配的規則,常用來匹配滿足匹配規則的文字。它定義了自己的語法,正規表示式中的字元可以分為普通字元和元字元,元字元在正規表示式中有特殊的含義。先看一下簡單的正規表示式:
\bhelloworld\b
這個正規表示式用來精確匹配helloworld這個字串。\b是乙個元字元,表示匹配單詞的邊界(開始或結束),helloworld中的每個字元是普通字元。
1、常用的元字元包括以下幾種
元字元
說明
舉例
\b匹配字串邊界
\bhello\b--精確匹配hello
\s匹配空白符(tab,空格等)
hi\shi--匹配hi hi,不匹配hihi
\d匹配數字
p\bp--可以匹配p2p
\w匹配字母,數字,下劃線
p\wp--可以匹配p_p
.匹配除換行的任意字元
^,&分別匹配字串的開始和結束,對應於\b
^hello&--精確匹配hello
此外還有
1.1 管道符 |
表示或,用於多個匹配規則的匹配。如正規表示式 rule1 | rule2將從左向右進行匹配,滿足其中乙個匹配規則rule1或rule2即可。
1.2 分組 ( )
將正規表示式用()括起來,這樣()裡面的這部分正規表示式就是乙個組。然後可以和限定符結合定義該組表示式的重複次數,而不僅僅是某個字元的重複。
如(\d\.)表示數字***.重複3次。
1.3 [ ]
在匹配時,只需要匹配[ ]中的任意乙個字元即可,如定義乙個母音的匹配規則[aaeeiioouu]。
還可以用乙個範圍來表示需要匹配的字元,如
[0-9] //匹配所有的數字
[a-z] //匹配所有的小寫字母
[a-z] //匹配所有的大寫字母
[a-za-z]//匹配所有的字母
注意,匹配時只能匹配到乙個字元,若要匹配到多個字元,如兩個,採用這種形式:^[0-9][0-9]&。
2、字元轉義\
匹配的字串中含有元字元時,必須使用轉義字元將元字元轉換成普通字元。如要查詢a.txt時,使用a\.txt。
3、限定符
當我們需要匹配5個數字時,可以使用\d\d\d\d\d這樣的形式,這樣書寫比較繁瑣,正規表示式提供了許多限定符來幫我們解決重複字元這個問題。如*是乙個限定符,表示前面的字元出現0次或更多次。^hi&.*^hi&可以匹配hi,中間是可重複的任意字元,然後是hi這樣的字串,可以匹配的字串包括hihi,hixxhi,hi***hi等等。
限定符說明*
重複0次或更多
+重複1次或更多
?重複0次或1次
重複n次
重複n次或更多
重複n到m次
如 ^\d-\d-\d& 匹配000-0000-0000這樣的形式。
4、反義
有時匹配規則描述起來比較複雜,往往用反義字元描述比較簡單,常用的反義字元有:
反義字元
說明\b
和\b對立,匹配不是開始或結束的位置
\s和\s對立,匹配非空白符
\d和\d對立,匹配非數字
\w和\w對立,匹配除字母,數字,下劃線的字元
[^x]
匹配除x之外的字元
[^abc]
匹配除abc之外的字元
5、通用字元類
posix還定義了一些特殊的字元類,可以供我們在正規表示式中使用
字元類
說明/等價於
[[:alnum:]]
[a-za-z0-9]
[[:alpha:]]
[a-za-z]
[[:blank:]]
空格符[[:cntrl:]]
控制字元
[[:digit:]]
[0-9]
[[:graph:]]
非空字元
[[:lower:]]
[a-z]
[[:print:]]
可列印字元
[[:punct:]]
標點符號
[[:space:]]
空白符[[:upper:]]
[a-z]
[[:xdigit:]]
十六進製制數[0-9a-fa-f]
6、匹配規則
預設情況下正規表示式匹配是貪婪匹配,即匹配盡可能多的字元。
如匹配規則為:a.*b,當它應用於aabab時,會匹配到aabab,而不是abab或ab。
參考:正規表示式到底是什麼東西
二、grep命令
linux命令grep是乙個強大的文字搜尋工具。它有兩個變體,分別是egrep和fgrep。分別對應於grep -e和grep -f。
grep命令的命令格式為:grep [選項]...pattern [file]...。
其中pattern為正規表示式。而posix將正規表示式分為了兩種,分別是基本正規表示式(bre)和擴充套件正規表示式(ere)。grep命令使用bre,egrep使用ere。
bre和ere的區別主要在於元字元。
bre支援的元字元只有
^ $ .
* 其他字元被識別為普通字元。
ere在bre的基礎上新增了 {},bre中只將{}當作普通字元對待,要使用此功能必須加\進行轉義,即「\」
(),bre中只將()當作普通字元對待,要使用此功能必須加\進行轉義,即「\(\)」
? + | 等。
grep命令最基本的用法是字元匹配,並把匹配的行列印出來。
還可以利用管道命令|和其他命令結合起來實現更複雜的功能。
ps:管道命令 command1 | command2 | command3,前乙個命令的輸出作為後乙個命令的輸入。
下面是一些簡單的例子:
2.1字元匹配
匹配檔案中以l開頭的文字,貪婪匹配,列印出所在的行:
2.2結合管道命令
查詢指定程序mentohust,將ps的輸出輸入到grep中進行過濾,結果如下:
Linux正規表示式grep
正規表示式是一種符號表示法,用於識別文字模式。linux處理正規表示式的主要程式是grep。grep搜尋與正規表示式匹配的行,並將結果輸送至標準輸出。1.grep匹配模式 grep按下述方式接受選項和引數 其中,regex表示正規表示式 1 grep options regex files 其中op...
Linux正規表示式 grep
grep命令 grep cinvabc word filename常用選項解釋 c 列印符合要求的行數。i 忽略大小寫。n 輸出符合要求的行及行號。v 列印不符合要求的行。a 後跟數字n 有無空格都可 列印符合要求的行和下面n行。b 後跟數字n,列印符合要求的行和上面n行。c 後跟數字n,列印符合要...
Linux正規表示式grep
正規表示式是一種符號表示法,用於識別文字模式。linux處理正規表示式的主要程式是grep。grep搜尋與正規表示式匹配的行,並將結果輸送至標準輸出。1.grep匹配模式 grep按下述方式接受選項和引數 其中,regex表示正規表示式 grep options regex files 其中opti...