linux基本命令grep egrep fgrep用法以及Regex 一、grep、egrep、fgrep命令 本文中主要介紹了linux系統下grep egrep fgrep命令和Regex的基本參數和使用格式、方法。(注釋:文中fg代表例子,)1.1、基本定義: www.2cto.com grep(global search regular RE ) and print out the line,全面搜尋Regex並把行列印出來)是一種強大的文本搜尋工具,它只能使用基本的Regex來搜尋文本,並把匹配的行列印出來。 grep是很常見也很常用的命令,它的主要功能是進行字串資料的比較,然後符合使用者需求的字串列印出來,但是主意,grep在資料中尋找一個字串時,是以“整行”為單位進行資料篩選的。 egrep命令等同於grep -E,利用此命令可以使用擴充的Regex對文本進行搜尋,並把符合使用者需求的字串列印出來。 fgrep命令等同於grep -F,它利用固定的字串來對文本進行搜尋,但不支援Regex的引用,所以此命令的執行速度也最快。1.2、命令基本用法 grep [option] '搜尋字串' filename grep常用選項: -a :在二進位檔案中,以文字檔的方式搜尋資料 -c :計算找到'搜尋字串'的次數 -i :忽略大小寫 -v :反向尋找,即顯示沒有'搜尋字串'內容的那行 -o :只顯示被模式比對的字串 -n :輸出行號 --colour(color):顏色顯示 -A:顯示匹配到字元那行的後面n行 -B:顯示匹配到字元那行的前面n行 -C:顯示匹配到字元那行的前後n行 二、Regex2.1、基本定義: 正則表達使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,Regex通常被用來檢索、替換那些符合某個模式的文本。簡而言之,Regex就是處理字串的方法,以行為單位進行字串的處理,通過一些特殊符號的輔助,可以讓使用者輕鬆搜尋/替換某特定的字串。 Regex分為兩類:基本的Regex和擴充的Regex。2.2、Regex詳細介紹 2.2.1、基本的Regex: (1)元字元: . :匹配任意單個字元 fg:尋找包含student且student後面帶一個字元的行 grep ‘student.’ /etc/passwd (模式可以用單引號和雙引號,如果模式中要做變數替換時則必須用雙引) [] :匹配指定範圍內的任意單個字元,[abc],[a-z],[0-9],[a-zA-Z] fg:尋找帶有數位行 grep ‘[0-9]’ /etc/passwd [^] :匹配指定範圍外的任意單個字元 fg:尋找沒有小寫字母的行。 grep ‘[^a-z]’ /etc/inittab [:space:]:表示空白字元 [:punct:]:表示所有標點符號的集合 [:lower:]:表示所有的小寫字母 [:upper:]:表示所有的大寫字母 [:alpha:]:表示大小寫字母 [:digit:]:表示數子 [:alnum:]:表示數字和大小寫字母-----使用格式[[:alnum:]]等 (2)次數匹配: * :匹配其前面的字元任意次 fg:尋找root出現0次或0次以上的行 grep ‘root*’ /etc/passwd .* :任一字元 fg:尋找包含root的行 grep 'root.*' /etc/passwd \?:匹配其前面的字元1次或0次 \{m,n\} :匹配其前字元最少m,最多n次) (3) 字元錨定: ^:錨定行首,此字元後面的任意內容必須出現在行首 fg:尋找行首以#開頭的行 grep '^#' /etc/inittab $:錨定行尾,此字元前面的任意內容必須出現在行尾 fg:尋找行首以root結尾的行 grep 'root$' /etc/inittab ^$:錨定空白行,可以統計空白行 \<或者\b:錨定詞首,其後面的任一字元必須做為單詞首部出現 fg:尋找root且root前面不包含任何字元的行 grep '\<root' /etc/man.config \>或者\b:錨定詞尾,其前面的任一字元必須做為單詞尾部出現 fg:\<root\> 尋找root單詞 grep "\<root\>" =grep "\broot\b" 2.2.2、擴充的Regex: 擴充的正則表達只是在基本的正則表達上作出了小小的一點修改,其修改如下: 在擴充的正則表達中把\( \) 寫成()、\{ \} 寫成{ },另外加入了+:次數匹配,匹配其前面的字元至少出現一次,無上限、|: 或者(二取一),其餘的都一樣, 基本Regex,使用( ) { } . ? |都需要轉義,在擴充正則表達中不需要加\,其詳細資料如下: (1) 字元匹配的命令和用法與基本Regex的用法相同,這裡不再重複闡述。 (2) 次數匹配: * :匹配其前面字元的任意次 ?:匹配其前面字元的0此或著1此 + :匹配其前面字元至少1此 fg:至少一個空白符: '[[:space:]]+' {m,n} :匹配其前面字元m到n次 (3) 字元錨定的用法和基本Regex的用法相同,在此不再闡述。 (4)特殊字元: | : 代表或者的意思。 fg:grep -E 'c|cat' file:表示在檔案file內尋找包含c或者cat \.:\表示逸出字元,此表示符號.三、grep命令利用小執行個體(1)顯示/etc/inittab 中以#開頭,且後面跟一個或者多個空白符,而後又跟了任意非空白符的行grep '#[[:space:]]*[^[:space:]]' /etc/inittab(2) 輸出不是數字開關的行grep '^[^0-9]'/etc/passwd(3)輸出行首是1或2grep '^\(1\|2\)' /etc/inittab或grep -E '^(1|2)' /etc/inittab (4)尋找前面是rc中間接任一字元而後跟/rc grep '.*\(rc\).*\/\1.*' /etc/inittab (5)取出當前電腦上的IP ifconfig |grep -A 1 "^eth0" |grep "\<[0-9.]\{1,\} |cut -d: -f2 (6)尋找當前系統上名字為student(必須出現在行首)的使用者賬戶的相關資訊,檔案為/etc/passwd grep "^student" /etc/passwd