---
name: "grep"
section: "1plan9"
platform: "linux"
package: "9base"
version: "1:6-14"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/grep/1plan9"
---

# grep(1plan9)

search a file for a pattern

## NAME

grep, g - search a file for a pattern

## SYNOPSIS

**grep** \[ *option ...* \] *pattern* \[ *file ...* \]

**g** \[ *option ...* \] *pattern* \[ *file ...* \]

## DESCRIPTION

*Grep* searches the input *files* (standard input default) for lines that match the *pattern*, a regular expression as defined in [*regexp*(7)](/regexp/7.md) with the addition of a newline character as an alternative (substitute for **\|**) with lowest precedence. Normally, each line matching the pattern is \`selected', and each selected line is copied to the standard output. The options are

- **-c**

  Print only a count of matching lines.

- **-h**

  Do not print file name tags (headers) with output lines.

- **-e**

  The following argument is taken as a *pattern*. This option makes it easy to specify patterns that might confuse argument parsing, such as **-n**.

- **-i**

  Ignore alphabetic case distinctions.  The implementation folds into lower case all letters in the pattern and input before interpretation.  Matched lines are printed in their original form.

- **-l**

  (ell) Print the names of files with selected lines; don't print the lines.

- **-L**

  Print the names of files with no selected lines; the converse of **-l**.

- **-n**

  Mark each printed line with its line number counted in its file.

- **-s**

  Produce no output, but return status.

- **-v**

  Reverse: print lines that do not match the pattern.

- **-f**

  The pattern argument is the name of a file containing regular expressions one per line.

- **-b**

  Don't buffer the output: write each output line as soon as it is discovered.

Output lines are tagged by file name when there is more than one input file. (To force this tagging, include **/dev/null** as a file name argument.)

Care should be taken when using the shell metacharacters **$\*\[^\|()=\\** and newline in *pattern*; it is safest to enclose the entire expression in single quotes **'**...**'**. An expression starting with '\*' will treat the rest of the expression as literal characters.

*G* invokes grep with **-n** and forces tagging of output lines by file name. If no files are listed, it searches all files matching

-

  ```
  *.C *.b *.c *.h *.m *.cc *.java *.cgi *.pl *.py *.tex *.ms
  ```

## SOURCE

**/src/cmd/grep**\
 **/bin/g**

## SEE ALSO

[*ed*(1)](/ed/1.md), [*awk*(1)](/awk/1.md), [*sed*(1)](/sed/1.md), [*sam*(1)](/sam/1.md), [*regexp*(7)](/regexp/7.md)

## DIAGNOSTICS

Exit status is null if any lines are selected, or non-null when no lines are selected or an error occurs.
