GREP IS MY FRIEND AND I LOVE IT!
./t.pl calistirmis serefiz! Proftpd loglarinda bulucam!
grep -wr 't\.pl' /var/log/proftpd/
Geri kalan grep helpi 🙂
[root@avokado ~]# grep --help
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c
Regexp selection and interpretation:
-E, --extended-regexp PATTERN is an extended regular expression
-F, --fixed-strings PATTERN is a set of newline-separated strings
-G, --basic-regexp PATTERN is a basic regular expression
-P, --perl-regexp PATTERN is a Perl 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
-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 print version information and exit
--help display this help and exit
--mmap use memory-mapped input if possible
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 filename for each match
-h, --no-filename suppress the prefixing filename on output
--label=LABEL print LABEL as filename for standard input
-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, -r, --recursive equivalent to --directories=recurse
--include=PATTERN files that match PATTERN will be examined
--exclude=PATTERN files that match PATTERN will be skipped.
--exclude-from=FILE files that match PATTERN in FILE will be skipped.
-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
-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
--color[=WHEN],
--colour[=WHEN] use markers to distinguish the matching string
WHEN may be `always', `never' or `auto'.
-U, --binary do not strip CR characters at EOL (MSDOS)
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)
`egrep' means `grep -E'. `fgrep' means `grep -F'.
With no FILE, or when FILE is -, read standard input. If less than
two FILEs given, assume -h. Exit status is 0 if match, 1 if no match,
and 2 if trouble.
Report bugs to
BUNUDA ALEX YAZMIS – SAGOLSUN.. (alexde kimse? :))
Hi, Lucy. Lucy's question was:
There's probably a very simple answer to this question,
but I cannot for the life of me figure it out.
How do you grep for an EXACT match of a string?
[data (abbreviated) was:]
10.1. #Bridgewater
10.10. #Scranton
[etc...]
I'm trying to grep for the exact match of 10.1. in a script.
That string will actually be in a variable defined previously
in the script. When the grep runs, it outputs every line containing
10.1?. How do I prevent that from happening?
- - -
Answer:
grep actually stands for Global Regular Expression Print, where the
Reg'Exp' is a description of the string to match.
(From the editor ed(1), use: g/regexp/p (to view lines with "foo"))
The extra things that need to be addressed in the regexp are:
1) You need to match the beginning of line
2) You want to see whitespace immediately after the "10.1."
3) You don't want to use simply "." for periods,
because a period in a regexp really means "match any single character".
You need: grep '^10\.1\.[ ]'
...where the gap between the square brackets [] is made up of one space
and one tab in either order. The carat "^" matches the beginning of line.
The backslash "\" tells grep that the following period only is to match
periods.
The backslashes can cause difficulties in shell scripts, you may prefer:
'^10[.]1[.][ ]'
Square-bracketed bits match one character position of the input,
where the matched character must be one of the ones between the
brackets. Very few characters are still special (or "weird" if
you prefer) between brackets, just ^, -, and ].
You should use single quotes in the shell, since double quotes
still allow various substitutions on the quoted text, include
output-, variable-, and history-substitution.
When using $ to access the value of a shell variable, where the
exact composition of the whitespace in that variable matter,
enclose the $variable substitution in double quotes. This keeps
whitespacing literally, instead of interpreting them as
command-argument splitters.
So in the end, you might have:
regexp='^10[.]1[.][ ]' # last [] contains space and tab
grep "$regexp" filename
Other notes: use a dollar sign to match end-of-line. Example, to
match a line containing the word "foo" and ABSOLUTELY NOTHING ELSE, use:
grep '^foo$'
-Alex.