linux grep和正規表示式

2021-09-08 11:10:15 字數 2532 閱讀 9134

正規表示式只是字串的一種描述,只有和支援正規表示式的工具相結合才能進行字串處理。本文以grep為例來講解正規表示式。

grep命令

功能:輸入檔案的每一行中查詢字串。

基本用法:

grep [-acinv] [--color=auto] [-a n] [-b n] '搜尋字串' 檔名

引數說明:

-a:將二進位制文件以文字方式處理

-c:顯示匹配次數

-i:忽略大小寫差異

-n:在行首顯示行號

-a:after的意思,顯示匹配字串後n行的資料

-b:before的意思,顯示匹配字串前n行的資料

-v:顯示沒有匹配行-a:after的意思,顯示匹配部分之後n行-b:before的意思,顯示匹配部分之前n行

--color:以特定顏色高亮顯示匹配關鍵字

–color選項是個非常好的選項,可以讓你清楚的明白匹配了那些字元。最好在自己的.bashrc或者.bash_profile檔案中加入:

alias grep=grep --color=auto

每次grep搜尋之後,自動高亮匹配效果了。

『搜尋字串』是正規表示式,注意為了避免shell的元字元對正規表示式的影響,請用單引號(』』)括起來,千萬不要用雙引號括起來("」)或者不括起來。

正規表示式分為基本正規表示式和擴充套件正規表示式。下面分別簡單總結一下。

基本正規表示式

正規表示式學習,主要是對正規表示式元資料的學習。正規表示式本身沒有什麼高深的東西,本文僅僅對基本正規表示式的元資料進行一下總結:

元資料意義和範例

^word

搜尋以word開頭的行。

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

grep –n 『^#』 regular.txt

word$

搜尋以word結束的行

例如,搜尋以『.』結束的行

grep –n 『.$』 regular.txt

.匹配任意乙個字元。

例如:grep –n 『e.e』 regular.txt

匹配e和e之間有任意乙個字元,可以匹配eee,eae,eve,但是不匹配ee。

\轉義字元。

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

grep –n 『\」 regular.txt

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

例如匹配gle,gogle,google,gooogle等等

grep –n 『go*gle』 regular.txt

[list]

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

例如:匹配gl,gf。

grep –n 『g[lf]』 regular.txt

[n1-n2]

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

例如:匹配數字字元

grep –n 『[0-9]』 regular.txt

[^list]

匹配字符集以外的字元

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

匹配非o字元

\前面的字元重複n1,n2次

例如:匹配google,gooogle。

grep –n 『go\gle』 regular.txt

\單詞是的開頭。

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

grep –n 『\

word\>

匹配單詞結尾

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

grep –n 『tion\>』 regular.txt

擴充套件正規表示式

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

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

元資料意義和範例 +

重複前面字元1到多次。

例如:匹配god,good,goood等等字串。

grep –ne go+d』 regular.txt

?匹配0或1次前面的字元

例如,匹配gd,god

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到多次。

例如匹配gle,gogle,google,gooogle等等

grep –ne 『go*gle』 regular.txt

linux下面正規表示式博大精深,上文支援總結了最常用的部分,如果熟練掌握的上面部分的正規表示式基本上可以滿足日常使用了。

另外linux很多命令支援正規表示式,比如find,sed,awk等

linux grep 正規表示式

grep正規表示式元字符集 錨定行的開始 如 grep 匹配所有以grep開頭的行。錨定行的結束 如 grep 匹配所有以grep結尾的行。匹配乙個非換行符的字元 如 gr.p 匹配gr後接乙個任意字元,然後是p。匹配零個或多個先前字元 如 grep 匹配所有乙個或多個空格後緊跟grep的行。一起用...

linux grep 正規表示式

grep正規表示式元字符集 錨定行的開始 如 grep 匹配所有以grep開頭的行。錨定行的結束 如 grep 匹配所有以grep結尾的行。匹配乙個非換行符的字元 如 gr.p 匹配gr後接乙個任意字元,然後是p。匹配零個或多個先前字元 如 grep 匹配所有乙個或多個空格後緊跟grep的行。一起用...

linux grep 正規表示式

grep正規表示式元字符集 錨定行的開始 如 grep 匹配所有以grep開頭的行。錨定行的結束 如 grep 匹配所有以grep結尾的行。匹配乙個非換行符的字元 如 gr.p 匹配gr後接乙個任意字元,然後是p。匹配零個或多個先前字元 如 grep 匹配所有乙個或多個空格後緊跟grep的行。一起用...