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). 

外部連結

參見