歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux基本命令之grep

Linux基本命令之grep

日期:2017/2/28 14:48:17   编辑:Linux教程

1. Grep含義:

grep是由 g/RE/p 拼起來的,其中g為global的意思,RE為regular expression的簡寫,p為print的意思;即grep的意思為“全局搜索正則表達式並打印該行”(grep名稱起源於ex編輯器)。

grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板後的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。

2. Grep家族:

grep家族包括grep、egrep和fgrep,其中egrep和fgrep是grep的簡單變種。

egrep擴展了grep,支持更多的正則表達式元字符。

fgrep叫fixed grep或fast grep,它將所有的字符當作字面值,即正則表達式元字符不再是特殊字符。

備注:在Ubuntu13.04的GNU版本的grep上進行測試發現grep命令支持的正則表達式元字符與egrep同樣。只是在使用時,grep將字符串中正則表達式的擴展字符解釋為字符,而不是正則表達式的擴展元字符,除非經過轉義符轉義;而egrep則默認將字符串中包含的擴展字符解釋為正則表達式的擴展元字符,正則表達式的元字符不需要經過轉義,這才是egrep與grep真正的不同,而不是說支持的正則表達式的字符集不同。查找man命令,我們獲得了確認:

-E, --extended-regexp
Interpret PATTERN as an extended regular expression (see below).

例如:可以嘗試下面的句子,就知道grep與egrep的不同了

grep -E '219|216' datafile

grep '219\|216' datafile

grep '219|216' datafile

3. Grep選項:

匹配控制:

-e#指定字符串做為查找文件內容的樣式。

-f#指定規則文件,其內容含有一個或多個規則樣式

-i#忽略字符大小寫的差別。

-v#顯示不包含匹配文本的所有行。

-w#只顯示全字符合的列。

輸出控制:

-c#只輸出匹配行的計數。

-L#列出文件內容不符合指定的樣式的文件名稱。

-l#列出文件內容符合指定的樣式的文件名稱

-n#在顯示符合樣式的那一行之前,標示出該行的列數編號。

-H#在顯示符合樣式的那一行之前,表示該行所屬的文件名稱。

-h #在顯示符合樣式的那一行之前,不標示該行所屬的文件名稱。

Copyright © Linux教程網 All Rights Reserved