grep

Multi tool use
Multi tool use







grep是一个最初用于Unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。




目录






  • 1 歷史


  • 2 功能和用法


  • 3 修改版


  • 4 作为动词的用法


  • 5 egrep和fgrep


  • 6 参考文献


  • 7 外部链接


  • 8 参见





歷史


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



外部链接







  • 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



参见




  • Boyer-Moore字符串搜索算法

  • Unix工具列表

  • 正则表达式

  • Searchmonkey












DuiQglbfuHGs2EydGjU El vWONK,7LKlHM,uUHKV,3,0uXVqKxcLX,4W7zgdkg7pH60j1sKIFDlM vX6pvjN cQJ4N2HVT6fIOQ4
C4WA,NNxGx,TrU1u7t

Popular posts from this blog

How to pass form data using jquery Ajax to insert data in database?

Guess what letter conforming each word

Run scheduled task as local user group (not BUILTIN)