I'm console newbie. As I know, matching multiple patterns like this:
aaa|bbb
But, | character is pipe on console, so how can I specify those multiple patterns for grep?
You can escape the pipe and put the pattern in quotes:
grep "aaa\|bbb"
or use -E
:
grep -E "aaa|bbb"
or
grep -E aaa\|bbb
echo -e 'aaa\nbbb\nccc' | grep "aaa\|bbb"
Jun 27, 2010 at 3:30
Or you go
grep -ie aaa -ie bbb filename
to grep for aaa or bbb in filename, case insensitively.
Lastly, you can put your patterns into a file, and use the -f flag. So grep -f patternlist.txt files
. Where patternlist.txt is simply:
aaa bbbMake sure there are no empty lines, though.
--Christopher Karel
Enclose your pattern in single quotes:
grep -E 'aaa|bbb'
Should your pattern include an apostrophe, enclose it in double quotes:
grep -E "its|it's"
If it contains both single and double quotes, enclose it in double quotes and prefix with a backslash the characters ", $, ` and \:
grep -E "its|it's|letter \"e\"|pay \$20|\`a'|C:\\\\AUTOEXEC\\.BAT"
The final example of C:\AUTOEXEC.BAT
takes into account that backslash is special both to the shell and to the regular expression syntax of egrep.
PS: The bash quoting page is a must-read.
egrep "aaa|bbb|ccc" <file>
will find all rows with either aaa OR bbb OR ccc in the file
egrep -i "aaa|bbb|ccc" <file>
will find aaa
OR aaA
OR aAa
OR Aaa
OR aAA
OR AAa
OR AAA
OR ... and the same for every other string enumerated between the pipe |
characters.