grep

Unix命令列工具程式

grep是一個最初用於Unix作業系統的命令列工具。在給出檔案列表或標準輸入後,grep會對匹配一個或多個正則表達式的文字進行搜尋,並只輸出匹配(或者不匹配)的行或文字。

grep這個應用程式最早由肯·湯普遜寫成。grep原先是ed下的一個應用程式,名稱來自於g/re/p(globally search a regular expression and print,以正則表達式進行全域尋找以及列印)。在ed下,輸入g/re/p這個命令後,會將所有符合先定義樣式的字串,以行為單位列印出來。

在1973年,Unix第四版中,grep首次出現在man頁面中。

功能和用法

這個程式的名稱來自Unix文字編輯器ed類似操作的命令:

g/re/p

這個命令搜尋整個檔案中匹配給定正則表達式的文字行,並顯示出來。有很多不同的命令列用於改變grep的預設行為,包括顯示出不匹配的文字行、尋找或排除搜尋的檔案以及用不同的方式在輸出中進行註釋。同時也有很多經典Unix下grep的現代版本,這些版本都有着獨特的功能。

這裏是一個常見的grep用法:

grep apple fruitlist.txt

在這個例子裏,grep會返回「fruitlist.txt」中所有包含「apple」的文字行。要注意的是,grep不會返回匹配「Apple」(A字母大寫)的文字行,因為grep預設情況下是大小寫敏感的。像大多數Unix命令列一樣,grep接受參數來改變或增加一些特別的功能。例如:

grep -i apple fruitlist.txt

這個命令會返回所有匹配「apple」、「Apple」、「apPLE」或其它混合大小寫的拼寫。

在一些grep版本中,參數 -e 可以用於使用多個匹配樣式來進行搜尋。

修改版

存在很多grep的修改版,例如agrep表示「近似的grep」approximate grep用於模糊字串搜尋,fgrep用於固定樣式搜尋fixed pattern searches,而egrep用於搜尋更複雜的正則表達式語法。

fgrep和egrep同grep基本上是一樣的程式。因為通過呼叫不同的參數,grep可以實現大多數功能。Tcgrep是用Perl正則表達式語言重寫的grep。所有grep的修改版都被應用到很多不同的作業系統中。

有一些其它的命令列名稱也包含了"grep"。如pgrep是用來顯示名稱匹配正則表達式行程

Perl中,grep是內建的功能,當提供正則表達式(或通用代碼塊)和一個列表時,會返回列表中匹配表達式的元素。在函數程式語言中,這個高階函數常稱為「過濾器」。

微軟Windows平台提供了一個叫"findstr"的工具來執行grep的大多數功能。

作為動詞的用法

由於「grep」很適合用英語發音,所以常被作為動詞使用,意為「搜尋」–這種搜尋通常是指使用grep工具來對已知的一系列檔案進行的搜尋。和google作為動詞時的用法類似,grep可以直接接搜尋對象做謂語,如「Kibo英語Kibo在他的Usenet上搜尋自己的名字(Kibo英語Kibo grepped his Usenet spool for his name.)」。有時候會用visual grep來表示使用grep的形式來從文字中找出某些資訊。

2003年12月,「牛津英語辭典線上版」添加了"grep"詞條,該詞條可以作為名詞或動詞來使用。

作為一個動詞,grep一個常見的用法如下: 「你不能grep死了的樹(You can't grep dead trees)」 -由於紙是由死了的樹做成的,所以這句話是說:你不能在傳統的非數碼媒體上使用grep如此簡單強大的搜尋功能。

單詞「grep」也成了正則表達式的同義詞。許多文件處理器現在也有了使用正則表達式搜尋的功能,這些功能常被稱為「grep工具」或「grep模式」並可以建立「grep樣式」,同時也導致出現混淆,特別是在非Unix環境下。

egrep和fgrep

grep的早期修改版包括了egrep和fgrep。前者使用了Ken Thompson最初的正則表達式實現後添加到UNIX的擴充正則表達式語法。後者則是簡單地讀取一系列固定字串來對檔案進行搜尋。這些早期的修改版被加入到多數現代的grep實現,只需要使用簡單的命令列參數就行了(如在GNU中,只要分別簡單地加上-E-F就可以了)。

參考文獻

  • Alain Magloire. Grep: Searching for a Pattern. Iuniverse Inc. August 2000. ISBN 0-595-10039-2. 
  • Andrew Hume. Grep wars: The strategic search initiative. In Peter Collinson, editor, Proceedings of the EUUG Spring 88 Conference, pages 237–245, Buntingford, UK, 1988. European UNIX User Group.
  • Raymond, Eric (editor). grep. Jargon File. [2006-06-29]. (原始內容存檔於2006-06-17). 

外部連結

參見