Detailed Explanation of grep Command Usage of Linux Common Commands

  • 2021-08-17 01:49:27
  • OfStack

1. Official profile

grep is a common command of linux. It is an Unix tool used to perform repeated search tasks on files and text. It can specify specific search criteria to search files and their contents through grep command to obtain useful information.


Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c

Regexp selection and interpretation:
 -E, --extended-regexp  PATTERN is an extended regular expression (ERE)
 -F, --fixed-strings  PATTERN is a set of newline-separated fixed strings
 -G, --basic-regexp  PATTERN is a basic regular expression (BRE)
 -P, --perl-regexp   PATTERN is a Perl regular expression
 -e, --regexp=PATTERN  use PATTERN for matching
 -f, --file=FILE   obtain PATTERN from FILE
 -i, --ignore-case   ignore case distinctions
 -w, --word-regexp   force PATTERN to match only whole words
 -x, --line-regexp   force PATTERN to match only whole lines
 -z, --null-data   a data line ends in 0 byte, not newline

Miscellaneous:
 -s, --no-messages   suppress error messages
 -v, --invert-match  select non-matching lines
 -V, --version    display version information and exit
  --help    display this help text and exit

Output control:
 -m, --max-count=NUM  stop after NUM matches
 -b, --byte-offset   print the byte offset with output lines
 -n, --line-number   print line number with output lines
  --line-buffered  flush output on every line
 -H, --with-filename  print the file name for each match
 -h, --no-filename   suppress the file name prefix on output
  --label=LABEL   use LABEL as the standard input file name prefix
 -o, --only-matching  show only the part of a line matching PATTERN
 -q, --quiet, --silent  suppress all normal output
  --binary-files=TYPE assume that binary files are TYPE;
       TYPE is 'binary', 'text', or 'without-match'
 -a, --text    equivalent to --binary-files=text
 -I      equivalent to --binary-files=without-match
 -d, --directories=ACTION how to handle directories;
       ACTION is 'read', 'recurse', or 'skip'
 -D, --devices=ACTION  how to handle devices, FIFOs and sockets;
       ACTION is 'read' or 'skip'
 -r, --recursive   like --directories=recurse
 -R, --dereference-recursive
       likewise, but follow all symlinks
  --include=FILE_PATTERN
       search only files that match FILE_PATTERN
  --exclude=FILE_PATTERN
       skip files and directories matching FILE_PATTERN
  --exclude-from=FILE skip files matching any file pattern from FILE
  --exclude-dir=PATTERN directories that match PATTERN will be skipped.
 -L, --files-without-match print only names of FILEs containing no match
 -l, --files-with-matches print only names of FILEs containing matches
 -c, --count    print only a count of matching lines per FILE
 -T, --initial-tab   make tabs line up (if needed)
 -Z, --null    print 0 byte after FILE name

Context control:
 -B, --before-context=NUM print NUM lines of leading context
 -A, --after-context=NUM print NUM lines of trailing context
 -C, --context=NUM   print NUM lines of output context
 -NUM      same as --context=NUM
  --group-separator=SEP use SEP as a group separator
  --no-group-separator use empty string as a group separator
  --color[=WHEN],
  --colour[=WHEN]  use markers to highlight the matching strings;
       WHEN is 'always', 'never', or 'auto'
 -U, --binary    do not strip CR characters at EOL (MSDOS/Windows)
 -u, --unix-byte-offsets report offsets as if CRs were not there
       (MSDOS/Windows)

'egrep' means 'grep -E'. 'fgrep' means 'grep -F'.
Direct invocation as either 'egrep' or 'fgrep' is deprecated.
When FILE is -, read standard input. With no FILE, read . if a command-line
-r is given, - otherwise. If fewer than two FILEs are given, assume -h.
Exit status is 0 if any line is selected, 1 otherwise;
if any error occurs and -q is not given, the exit status is 2.

Report bugs to: bug-grep@gnu.org
GNU Grep home page: <http://www.gnu.org/software/grep/>
General help using GNU software: http://www.gnu.org/gethelp/

I usually simply check a user's data for simple data proofreading. Recently, I suddenly received the need to analyze the background log, only to find that grep is still of great use.

For example, our background log is quite large. If we pull it directly from the server, it takes a long time and takes up bandwidth. Therefore, the scheme is to redirect it to a new file directly by using grep keyword, from 14G directly to 12M, and then clean and analyze the data.

2. Practical introduction

2.1 Using grep Command to Query Multiple Text in Multiple Files

note: Using the egrep command, you can use extended regular expressions

1. Multiple files

grep 'pattern' file1 file2

2. Multi-text, relationship is OR

egrep 'pattern1|pattern2' *.py grep -e pattern1 -e pattern2 *.py grep -E 'pattern1|pattern2' *.doc

For example, the keywords wordA or wordB existing in the file are extracted below:


grep 'wordA\|wordB' *.py
grep -E 'wordA|wordB' *.doc
grep -e wordA -e wordB *.py
egrep "wordA|wordB" *.c

3. The multi-text relationship is AND

I don't see "option" that can be used directly here, so I can only add 1 layer of pipe symbol.

For example:


grep -e pattern1 *.py |grep -e pattern2

2.2 Exact match keywords-w


grep -w 'warning\|error\|critical' /home/logs

2.3 Ignore case with the-i parameter, and color highlights the match result


egrep -wi --color 'warning|error|critical' /home/logs

2.4 Recursive lookup


egrep -Rwi --color 'warning|error' /home/logs/

Related articles: