grep
| Original author(s) | Ken Thompson[1][2] |
|---|---|
| Initial release | November 1974[1] |
| Stable release |
3.0
|
| Platform | Unix, Unix-like systems |
| Type | Command-line utility |
| License | GNU General Public License |
| Website |
www |
grep is a command-line utility for searching plain-text data sets for lines that match a regular expression. Its name comes from the ed command g/re/p (globally search a regular expression and print), which has the same effect: doing a global search with the regular expression and printing all matching lines.[3][4] Grep was originally developed for the Unix operating system, but later available for all Unix-like systems.
Contents
History[edit]
The first version of grep was written overnight by Ken Thompson to help Lee E. McMahon analyze the text of the Federalist Papers to determine authorship of the individual papers.[5] The ed text editor (also authored by Thompson) had regular expression support but could not be used on such a large amount of text, so Thompson excerpted that code into a standalone tool.[1] Thompson chose the name because in ed, the command g/re/p would print all lines matching a previously defined pattern.[6][7] grep was first included in Version 4 Unix. Stating that it is "generally cited as the prototypical software tool", Doug McIlroy credited grep with "irrevocably ingraining" Thompson's tools philosophy in Unix.[8]
Sample usage[edit]
The following example demonstrates the output of the grep command given different arguments
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
$ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
12:operator:x:11:0:operator:/root:/sbin/nologin
$ grep -c false /etc/passwd
7
Variations[edit]
A variety of grep implementations are available in many operating systems and software development environments.[9] Early variants included egrep and fgrep, introduced in Version 7 Unix.[8] The "egrep" variant applies an extended regular expression syntax that was added to Unix after Ken Thompson's original regular expression implementation by Alfred Aho.[10] The "fgrep" variant searches for any of a list of fixed strings using the Aho–Corasick string matching algorithm.[11] Binaries of these variants persist in most modern systems, however their explicit usage has been deprecated and the functionalities of these variants are included in grep as the command-line switches -E and -F; the use of the switches is therefore the recommended method of use.[12]
Other commands contain the word "grep" to indicate that they search (usually for regular expression matches). The pgrep utility, for instance, displays the processes whose names match a given regular expression.[13]
In the Perl programming language, grep is the name of the built-in function that finds elements in a list that satisfy a certain property.[14] This higher-order function is typically named filter in functional programming languages.
The pcregrep command is an implementation of grep that uses Perl regular expression syntax.[15] Similar functionality can be invoked in the GNU version of grep with the -P flag.[16]
Ports of grep (within Cygwin and GnuWin32, for example) also run under Microsoft Windows. Some versions of Windows feature the similar qgrep or Findstr command.[17]
The software Adobe InDesign has functions GREP (since CS3 version (2007)[18]), in the find/change dialog box[19] "GREP" tab, and introduced with InDesign CS4[20] in paragraph styles[21] "GREP styles".
Usage as a verb[edit]
In December 2003, the Oxford English Dictionary Online added draft entries for "grep" as both a noun and a verb.
A common verb usage is the phrase "You can't grep dead trees"—meaning one can more easily search through digital media, using tools such as grep, than one could with a hard copy (i.e., one made from dead trees, paper).[22] Compare with google.
See also[edit]
- Boyer–Moore string search algorithm
- List of Unix utilities
- agrep, an approximate string-matching command
- find (Windows), a DOS and Windows command that performs text searches, similar to a simple
grep - find (Unix), a Unix command that finds files by attribute, very different from
grep - vgrep, or "visual grep"
References[edit]
- ^ a b c Kernighan, Brian (1984). The Unix Programming Environment. Prentice Hall. p. 102. ISBN 0-13-937681-X.
- ^ “grep was a private command of mine for quite a while before i made it public.” -Ken Thompson Archived 2015-05-26 at the Wayback Machine., By Benjamin Rualthanzauva, Published on Feb 5, 2014, Medium
- ^ Hauben et al. 1997, Ch. 9
- ^ Raymond, Eric. "grep". Jargon File. Archived from the original on 2006-06-17. Retrieved 2006-06-29.
- ^ Computerphile, Where GREP Came From, interview with Brian Kernighan, https://www.youtube.com/watch?v=NTfOnGZUZDk
- ^ "ed regexes". perl.plover.com. Archived from the original on 20 October 2017. Retrieved 24 April 2018.
- ^ "How Grep Got its Name". robots.thoughtbot.com. Archived from the original on 9 August 2017. Retrieved 24 April 2018.
- ^ a b McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139. Archived (PDF) from the original on 2017-11-11.
- ^ Abou-Assaleh, Tony; Wei Ai (March 2004). Survey of Global Regular Expression Print (GREP) Tools (Technical report). Dalhousie University.
- ^ Hume, Andrew (1988). "A Tale of Two Greps". Software—Practice & Experience. 18 (11): 1063.
- ^ Meurant, Gerard (12 Sep 1990). Algorithms and Complexity. Elsevier Science. p. 278. Archived from the original on 4 March 2016. Retrieved 12 December 2015.
- ^ "grep". www.pubs.opengroup.org. The Open Group. Archived from the original on 28 November 2015. Retrieved 12 December 2015.
- ^ "pgrep(1)". www.linux.die.net. Archived from the original on 22 December 2015. Retrieved 12 December 2015.
- ^ "grep". www.perldoc.perl.org. Archived from the original on 7 December 2015. Retrieved 12 December 2015.
- ^ "pcregrep man page". www.pcre.org. University of Cambridge. Archived from the original on 23 December 2015. Retrieved 12 December 2015.
- ^ "grep(1)". www.linux.die.net. Archived from the original on 10 December 2015. Retrieved 12 December 2015.
- ^
Spalding, George (2000). Windows 2000 administration. Network professional's library. Osborne/McGraw-Hill. p. 634. ISBN 978-0-07-882582-8. Retrieved 2010-12-10.
QGREP.EXE[:] A similar tool to grep in UNIX, this tool can be used to search for a text string
- ^ "Review: Adobe InDesign CS3 - CreativePro.com". creativepro.com. 20 April 2007. Archived from the original on 5 January 2018. Retrieved 24 April 2018.
- ^ "InDesign Help: find/change". Archived from the original on 2016-08-28. Retrieved 2016-08-12.
- ^ "Archived copy". Archived from the original on 2017-09-24. Retrieved 2018-01-05.
- ^ "InDesign Help: GREP styles". Archived from the original on 2016-08-28. Retrieved 2016-08-12.
- ^ Jargon File, article "Documentation"
- Notes
- Alain Magloire (August 2000). Grep: Searching for a Pattern. Iuniverse Inc. ISBN 0-595-10039-2.
- Hume, Andrew 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.
- Michael Hauben; et al. (April 1997). Netizens: On the History and Impact of Usenet and the Internet (Perspectives). Wiley-IEEE Computer Society Press. ISBN 978-0-8186-7706-9.
External links[edit]
| The Wikibook How To Search has a page on the topic of: grep |
- Official website
- Official manual
- "why GNU grep is fast" - implementation details from GNU grep's author.
- Network grep - A packet analyzer used to match patterns at the network layer