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