grep
grep是一個最初用於Unix操作系統的命令行工具。在給出文件列表或標準輸入後,grep會對匹配一個或多個正則表達式的文本進行搜索,並只輸出匹配(或者不匹配)的行或文本。
grep這個應用程式最早由肯·湯普遜寫成。grep原先是ed下的一個應用程式,名稱來自於g/re/p(globally search a regular expression and print,以正則表達式進行全域尋找以及列印)。在ed下,輸入g/re/p這個命令後,會將所有符合先定義樣式的字串,以行為單位列印出來。
在1973年,Unix第四版中,grep首次出現在man頁面中。
功能和用法
[編輯]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 可以用於使用多個匹配樣式來進行搜索。
修改版
[編輯]此條目不符合維基百科的品質標準,需要完全重寫。 (2015年12月14日) |
存在很多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的大多數功能。
作為動詞的用法
[編輯]此條目不符合維基百科的品質標準,需要完全重寫。 (2015年12月14日) |
由於「grep」很適合用英語發音,所以常被作為動詞使用,意為「搜索」–這種搜索通常是指使用grep工具來對已知的一系列文件進行的搜索。和google作為動詞時的用法類似,grep可以直接接搜索對象做謂語,如「Kibo在他的Usenet上搜索自己的名字(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).
外部連結
[編輯]- GNU grep (german) (頁面存檔備份,存於網際網路檔案館)
- (英文)GNU grep (頁面存檔備份,存於網際網路檔案館) - 這個版本的grep常附帶在各種Linux發行版中
- (英文)GNU grep
- (英文)The grep Command (頁面存檔備份,存於網際網路檔案館) - Linux信息項目(The Linux Information Project, LINFO)製作
- (英文)AIX grep reference
- (英文)"The Treacherous Optimization" (頁面存檔備份,存於網際網路檔案館) -(討論在最佳和最糟情況下使用grep,如何進行權衡)
- (英文)Egrep for linguists (頁面存檔備份,存於網際網路檔案館) 對egrep的介紹
- (英文)Tony Abou-Assaleh's list of Greps (頁面存檔備份,存於網際網路檔案館)
- (英文)Grep for Windows