1. 程式人生 > >正則介紹、grep

正則介紹、grep

正則介紹、grep

正則介紹

在計算機科學中,對“正則表達式”的定義是:它使用單個字符串來描述或匹配一系列符合某個句法規則的字符串。在很多文本編輯器或其它工具裏,正則表達式通常用來檢索和替換那些符合某個模式的文本內容。許多程序設計語言也都支持利用正則表達式進行字符串操作。對於系統管理員來講,正則表達式貫穿在我們的日常運維工作和中,物理李娜是查找某個文檔,還是查詢某個日誌文件並分析其內容,都會用到正則表達式。

其實正則表達式只是一種思想、一種表示方法。只要我們使用的工具支持這種表示方法,那麽這個工具就可以處理正則表達式的字符串。常用的工具grep、sed、awak等。



grep命令

grep是用來過濾指定關鍵詞的。

grep是一種強大的文本搜索工具,它能使用特定模式匹配搜索文本,並默認輸出匹配行。grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板後的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。


grep [cinvABC] ‘word‘ filename

-c 表示打印符合要求的行數

-i 表示忽略大小寫

-n 表示輸出符合要求的行及其行號

-v 表示打印不符合要求的行

-r 遞歸的讀取目錄下的所有文件,包括子目錄。

比如grep -r ‘root’/etc/ 會找出/etc/目錄及子目錄下的所有文件中,含有root字符串的行。

-A 後跟一個數字,例如-A 2 表示打印符合要求的行以及下面兩行。

-B 後跟一個數字,例如-B 2 表示打印符合要求的行以及上面兩行。

-C 後跟一個數字,例如-C 2 表示打印合格要求的行已經上下兩行。


grep後不跟任何參數。

查找出文件passwd中帶有字符串nologin的行。

技術分享圖片


grep -c

打印出文件passwd中含有nologin字符串的行數(有幾行含有nologin。)

[root@centos-01 grep]# grep -c ‘nologin‘ /root/grep/passwd

17


grep -n

輸出符合要求的內容,並顯示行號。

技術分享圖片


grep -i

忽略大小寫。

技術分享圖片


grep -v

取反,打印不符合要求的行。

在passwd文件中查找不含有nologin字符串的行。

技術分享圖片


grep -r

遞歸的讀取目錄下的所有文件,包括子目錄。

比如grep -r ‘root’/etc/ 會找出/etc/目錄及子目錄下的所有文件中,含有root字符串的行。


grep -A

後面跟數字n,表示符合要求的行及下面n行。

技術分享圖片


grep -B

後面跟數字n,表示符合要求的行及上面n行。

技術分享圖片


grep -C

後面跟數字n,表示符合要求的行及上下n行。

技術分享圖片


grep ‘[0-9]‘ /etc/inittab

打印出文件中含有數字1-9其中一個的行。

grep -v ‘[0-9]‘ /etc/inittab

打印出文件中不含有數字0-9其中一個的行。

技術分享圖片


grep ‘^#‘ /etc/inittab

打印出文件中以#開頭的行。

grep -v ‘^#‘ /etc/inittab

打印出文件中不以#開頭的行。

技術分享圖片


再正則表達式中,^表示行的開始,$表示行的結尾,空行則可以用^$表示。

grep ‘^&‘ inittab

打印出文件中的空行。

grep -v ‘^&‘ inittab

打印出文件中的非空行。

技術分享圖片


[^字符]表示除[]內字符之外的字符。^有非的意思。

grep -n ‘^[^0-9]‘ inittab

打印出開頭不為數字的行,並顯示行號。

grep -nv ‘^[^0-9]‘ inittab

打印出開頭為數字的行和空行,並顯示行號。

技術分享圖片


grep -n ‘[^0-9]‘ inittab

打印出整行不為數字的行,並顯示行號。

grep -nv ‘[^0-9]‘ inittab

打印出整行為數字的行和空行,並顯示行號。

技術分享圖片



.表示任意一個字符。r.o表示r與o之間一個任意字符。

*表示零個或多個*前面的字符ooo*表示o、oo、ooo、oooo或者更多o。

grep -n ‘r.o‘ test

技術分享圖片


grep -n ‘o*o‘ test(*表示0個或多個*前面的字符)#查找文件中 1個o兩個o或者更多o的行。

匹配*前面的g,且還要匹配g之前必須是huan。

技術分享圖片


grep -n ‘a*c‘ test 可以匹配到:

只含有字母c的,只含有字母a的,含有字母ac的

不能匹配到:不含字母a或字母c的。


.*表示零個或多個任意字符,空行也包含在內。

grep ‘.*‘ passwd

匹配passwd中的所有字符。

技術分享圖片


{n},n為數字,表示{}前面的字符重復n次。需要註意的是{}左右都要加上轉移字符\。{}還可以表示範圍,{n1,n2}其中n1<n2,表示重復n1到n2次前面的字符,n2可以為空,表示大於等於n1次。

技術分享圖片

技術分享圖片


+表示匹配+前面的字符出現1個或多次(*匹配*前面的字符出現0次或多次)

grep使用+時需要用\ 轉義

egrep使用+時不需要用\ 轉義

技術分享圖片


?表示匹配?前面出字符出現0次或1次

grep使用?時需要用\ 轉義

egrep使用?時不需要用\ 轉義

技術分享圖片


|(數線)表示或者的意思

grep使用|時需要用\ 轉義

egrep使用|時不需要用\ 轉義

技術分享圖片


()表示一個整體

grep使用|時需要用() 轉義

egrep使用|時不需要用() 轉義

技術分享圖片


grep -n ‘\(aa\)\+‘ abc 過濾出含有一個或多個aa字符串的。

註意:grep命令使用:{}、+、?、|、()這些符號時需要加上轉義符\。egrep 命令使用時不需要加轉義符\。


本文出自 “網管的學習之路” 博客,請務必保留此出處http://754599082.blog.51cto.com/11510506/1983615

正則介紹、grep