**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（英语：）在他的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.. 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).. Jargon File.  [2006-06-29]. （原始内容存档于2006-06-17）.

外部链接
----

|  |  |
| --- | --- |
|  | 在Wikibooks How to search有更多關於本條目的內容：**grep** |

* 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

参见
--

* iconLinux主题
* 自由软件主题

* Boyer-Moore字符串搜索算法
* Unix工具列表
* 正则表达式
* Searchmonkey



|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
Unix命令行程序和shell内建命令 |
| --- |
|  |
| 文件系統 | 
* cat
* cd
* chmod
* chown
* chgrp
* cksum
* cmp
* cp
* dd
* du
* df
* file
* fsck
* fuser
* ln
* ls
* mkdir
* mount
* mv
* pax（英语：）
* pwd
* rm
* rmdir
* size
* split
* stat
* tee
* touch
* type（英语：）
* umask（英语：）

 |
|  |
| 程序 | 
* at
* bg
* chroot
* cron
* fg
* kill
* killall（英语：）
* nice
* pgrep
* pkill（英语：）
* ps
* pstree（英语：）
* time
* top

 |
|  |
| 用户环境 | 
* clear
* env
* exit
* history（英语：）
* id
* logname
* mesg（英语：）
* passwd
* su
* sudo
* uptime
* talk（英语：）
* tput（英语：）
* uname
* w
* wall（英语：）
* who
* whoami
* write（英语：）

 |
|  |
| 文本编辑 | 
* awk
* banner（英语：）
* basename
* comm（英语：）
* csplit（英语：）
* cut
* diff
* dirname
* ed
* ex
* fmt（英语：）
* fold（英语：）
* head（英语：）
* iconv
* join（英语：）
* less
* more
* nl（英语：）
* paste（英语：）
* sed
* sort（英语：）
* spell（英语：）
* strings（英语：）
* tail
* tr
* uniq（英语：）
* vi
* wc
* xargs

 |
|  |
| 壳层内建 | 
* alias
* echo
* printf格式字符串
* test（英语：）
* unset
* wait

 |
|  |
| 网络 | 
* dig
* host
* ifconfig
* inetd（英语：）
* netcat
* netstat
* nslookup
* ping
* rdate（英语：）
* rlogin（英语：）
* route
* ssh
* traceroute

 |
|  |
| 查找 | 
* find
* grep
* locate
* whatis（英语：）
* whereis

 |
|  |
| 文档 | 
* apropos（英语：）
* help（英语：）
* man

 |
|  |
| 软件开发 | 
* ar
* ctags
* lex
* make
* nm
* strip
* yacc

 |
|  |
| 杂项 | 
* bc
* cal
* dc
* expr
* lp（英语：）
* lpr
* sleep
* true和false
* yes

 |
|  |
| Unix实用程序列表 |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| 规范控制 編輯維基數據鏈接 | 
* GND: 7692411-7

 |

 |