grep -H -i -n -r -C# -e [pattern] file

 

with:

-H

print filename for each match

-i

ignore case

-n

print line number

-r

recursive

-C#

show context of # lines around match

-e pattern

specify search pattern

file

filename(s)

 

Rejecting results with the grep -v option

Sometimes it is a problem that grep shows you every line, where it finds a substring. Assume, as a real live example, you work on your inclusive analysis code and look for a constant named YBINS, but there is also a constant named XYBINS in the code. grep -e YBINS *.c therefore will also give you back every line which contains XYBINS. Chris showed me an easy way to reject those results (thanks!!):

grep YBINS *.c |  grep -v XYBINS

The -v option performs a revert-match and filters out again all lines which contain XYBINS. The only problem are lines, which contain both strings YBINS and XYBINS seperately...

 

 

[linux] ~ $ grep --help

Usage: grep [OPTION]... PATTERN [FILE] ...

Search for PATTERN in each FILE or standard input.

 

Regexp selection and interpretation:

-E, --extended-regexp PATTERN is an extended regular expression
-F, --fixed-regexp PATTERN is a fixed string separated by newlines
-G, --basic-regexp PATTERN is a basic regular expression
-e, --regexp=PATTERN use PATTERN as a regular expression
-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

Miscellaneous:

-s, --no-messages suppress error messages
-v, --revert-match select non-matching lines
-V, --version print version information and exit
--help display this help and exit

Output control:

-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
-H, --with-filename print the filename for each match
-h, --no-filename suppress the prefixing filename on output
-q, --quiet, --silent suppress all normal output
-L, --files-without-match only print FILE names containing no match
-l, --files-with-matches only print FILE names containing matches
-c, --count only print a count of matching lines per FILE

Context control:

-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-NUM same as both -B NUM and -A NUM
-C, --context same as -2
-U, --binary do not strip CR characters at EOL (MSDOS)
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)

If no -[GEF], then `egrep' assumes -E, `fgrep' -F, else -G.
With no FILE, or when FILE is -, read standard input. If less than
two FILEs given, assume -h. Exit with 0 if matches, with 1 if none.
Exit with 2 if syntax errors or system errors.

Report bugs to <bug-gnu-utils@gnu.org>.