1. 程式人生 > >二十六、正則介紹grep上、grep中、grep下

二十六、正則介紹grep上、grep中、grep下

grep egrep

二十六、正則介紹grep上、grep中、grep下

正則介紹grep

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

它是一種思想、一種表示方法。只要使用的工具支持這種表示方法,那這個工具就可以處理正則的字符串。常用工具有grep、sed、awk等,其中grep、sed、awk都是針對文本的行進行操作的。

grep/egrep工具

grep [-cinvABC] 'word' filename

最簡單用法:後面跟個關鍵詞,再跟文件名

-c:行數

-i:不區分大小寫

-n:顯示行號

-v:取反,打印不符合要求的行

-r:遍歷所有子目錄

-A:後跟數字,過濾出符合要求的行以及下面n行

-B:同上,過濾出符合要求的行以及上面n行

-C:同上,同時過濾符合要求的行以及上下各n行

-r選項示例:

# grep -r 'root' /etc/

會將/etc/下所有子目錄裏包含有root的文件全部列出來。

若不加-r

# grep 'root' /etc/

grep: /etc/: 是一個目錄

會告訴你/etc/是一個目錄。

不加-r就只能針對文件做。

# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

# grep -r 'root' /etc/ > /tmp/grep.log

# grep passwd /tmp/grep.log

先將/etc/下有root的內容寫入到/tmp/grep.log文件裏去,再從中過濾出passwd。

一個目錄下,過濾所有*.php文檔中含有eval的行

# grep -r --include="*.php" 'eval' /data/

# grep -A2 'root' passwd

# grep -B2 'root' passwd 上面沒有,就沒列出來

root:x:0:0:root:/root:/bin/bash

--

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

正則

grep(中括號用grep)

# grep '[0-9]' passwd 將帶有[0-9]的數字行全部列出來,也可以逗號[0,9],只過濾帶0和9的行。

# grep -v '[0-9]' passwd 過濾出不帶[0-9]的行

# grep -v '^#' inittab 將以#開頭的行全都不顯示出來,一般常用於看配置文件,直接過濾掉註釋行(以#開頭的行)。

# grep '[^0-9]' inittab 將非[0-9]的所有字符都顯示出來。

# grep '^[^0-9]' inittab 將以非[0-9]開頭的顯示出來。

# grep -v '^[^0-9]' inittab 相反的行,以[0-9]開頭的

# grep 'r.o' passwd 此處的“.”代表任意字符,將包含r.o,中間不管什麽字符都顯示出來。

# grep 'r*o' passwd 以r開頭的字符重復0-n次,or,或者ro都可顯示出來,只要是這兩個字符,別的不行。

user3:x:1002:1004::/hrlrrroorome/user3:/bin/bash

# grep '.*' passwd .*表示任意字符,甚至包括空行。

# grep 'dbus.*' passwd

dbus:x:81:81:System message bus:/:/sbin/nologin

# grep 'dbus.*login' passwd

dbus:x:81:81:System message bus:/:/sbin/nologin

egrep(小括號,花括號用egrep)

# grep 'o\{2\}' passwd 表示o出現兩次

# grep 'o\{0,3\}' passwd 0至3次都匹配

# grep -E 'o{2}' passwd

# egrep 'o{2}' passwd

# egrep '(oo){2}' passwd 小括號,兩個oo,範圍

脫義,-E,egrep。任意使用一個

# egrep 'o+r' passwd +和*類似。表示匹配1個或多個+前面的字符。

# egrep 'o?r' passwd

?表示?前面的字符重復次數為0或1,有就顯示or,沒有就顯示r。

# egrep 'root|nologin' passwd 豎線,代表或者的意思,root或者nologin都顯示出來。


二十六、正則介紹grep上、grep中、grep下