首頁  >  文章  >  運維  >  shell程式設計--grep指令如何用?

shell程式設計--grep指令如何用?

PHP中文网
PHP中文网原創
2017-06-20 11:12:492476瀏覽

大家在學習正規表示式之前,首先要明確一點,並且把它牢牢記在心裡,那就是:

在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、a​​bominate、anomie、 atomize,寫正規表示式,將他們配對出來

 

 

##範例六:新用戶Alex213sb、Wpq2222b、yH438PIG、egon666、egon

濾出使用者名稱組成是字母+數字+字母的行

範例七:顯示出/etc目錄下所有包含root的檔案名稱

#### ############## #################### ############例如八:過濾掉/etc/ssh/sshd_config內所有註解與所有空白行####### ##################### #############以上範例只是很小的一部分,大家只要勤加練習,一定很快就能掌握grep指令的使用啦^^############ #######

以上是shell程式設計--grep指令如何用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn