大家在學習正則表達式之前,首先要明確一點,並把它牢牢記在心裡,那就是: 在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,不要把二者搞混了。切記!!! 通常有三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。下麵我就為大家介紹grep命令的使用方法。 ...
大家在學習正則表達式之前,首先要明確一點,並把它牢牢記在心裡,那就是:
在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,不要把二者搞混了。切記!!!
通常有三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。下麵我就為大家介紹grep命令的使用方法。
一、使用grep命令搜索文件中的內容
grep和egrep命令能夠在一個或多個文件的內容中搜索某一特定的字元模式,也被稱為正則表達式(regular expressions)。一個模式可以是一個單一的字元、一個字元串、一個單詞或一個句子。
一個正則表達式是描述一組字元串的一個模式。正則表達式的構成是模仿了數學表達式,通過使用操作符將較小的表達式組合成一個新的表達式。一個正則表達式既可以是一些純文本文字,也可以是用來產生模式的一些特殊字元。為了進一步定義一個搜索模式,grep命令支持以下幾種正則表達式的元字元,也稱通配符。
ps:正則表達式語言由兩種基本字元類型組成:原義(正常)文本字元和元字元。元字元使正則表達式具有處理能力。所謂元字元就是指那些在正則表達式中具有特殊意義的專用字元,可以用來規定其前導字元(即位於元字元前面的字元)在目標對象中的出現模式。
c*:將匹配0個或多個字元c
.:將匹配任何一個且只能是一個字元(換行符除外)
[xyz]:將匹配方括弧中的任意一個字元
[^xyz]:將匹配不包括方括弧中的字元的所有字元
^:鎖定行的開頭
$:鎖定行的結尾
在基本正則表達式中,如元字元*、+、{}、|、和()已經失去了它們原來的意義,如果要回覆他們原本的含義要在之前冠以反斜線\,如\*、\+等。
grep命令是用來在每一個文件中或標準輸出上搜索特定的模式。當使用grep命令時,包含一個指定字元模式的每一行都會被列印在屏幕上,grep命令的語法格式如下:
grep 選項 模式 文件名
其中,選項可以改變grep命令的搜索方式,除了-w選項外,其他的每個選項都可以在egrep和fgrep命令中使用。grep命令常用選項如下:
-c(count):僅列出包含模式的行數
-i(ignore):忽略模式中字母大小寫
-l(list):列出帶有匹配行的文件名
-n:在匹配行的前面列出行號
-v:列出沒有匹配模式的行(取反)
-w:把表達式當做一個完整的單字來搜索,忽略那些部分匹配的行
-q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容
-A n :如果匹配成功,則將匹配行及其後n行一起列印出來
-B n :如果匹配成功,則將匹配行及其前n行一起列印出來
-C n :如果匹配成功,則將匹配行及其前後n行一起列印出來
ps:如果搜索的是多個文件,grep命令的結果只顯示在文件中發現匹配模式的文件名;
如果搜索的是單個文件,grep命令的結果將顯示每一個包含匹配模式的行。
上面就是grep命令的基本使用方法。但是有時一個簡單的正則表達式無法定位你要搜索的內容,如要搜索同時滿足模式一和模式二的數據行,這時egrep命令就可以派上用場。
egrep命令的語法格式和grep命令相同。但是egrep命令是用來在一個或多個文件的內容中利用擴展的正則表達式的元字元搜索特定的模式。擴展的正則表達式的元字元包含了grep命令中使用的正則表達式元字元的同時,還增加了一些額外的元字元,大致有下麵幾個:
+:匹配一個或多個前導字元
a|b:匹配a或b
(RE):匹配括弧中的正則表達式RE
下麵我將通過一些基本的例子來增進大家對grep和egrep命令用法的瞭解。鑒於grep命令中所有的選項egrep都能夠使用(egrep更加強大),為方便起見我將使用egrep命令為大家演示:
例一:顯示出文件/etc/passwd含有root的行
例二:輸出/etc/passwd中任何包含bash的所有行,還要輸出緊接著這行的上下各兩行的內容
例三:顯示出/etc/passwd中有多少行含有nologin
例四:顯示出/etc/passwd中那些行含有root,並將行號一塊輸出
例五:
新建用戶abominable、abominate、anomie、atomize,編寫正則表達式,將他們匹配出來
例六:新建用戶Alex213sb、Wpq2222b、yH438PIG、egon666、egon過濾出用戶名組成是字母+數字+字母的行
例七:顯示出/etc目錄下所有包含root的文件名
例八:過濾掉/etc/ssh/sshd_config內所有註釋和所有空行
以上例子只是很小的一部分,大家只要勤加練習,一定很快就能掌握grep命令的使用啦 ^^