正則介紹、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