I need to return results for two different matches from a single file.
grep "string1" my.file correctly returns the single instance of string1 in my.file
grep "string2" my.file correctly returns the single instance of string2 in my.file
but
grep "string1|string2" my.file returns nothing
in regex test apps that syntax is correct, so why does it not work for grep in cygwin ?
Using the | character without escaping it in a basic regular expression will only match the | literal. For instance, if you have a file with contents
string1 string2 string1|string2 Using grep "string1|string2" my.file will only match the last line
$ grep "string1|string2" my.file string1|string2 In order to use the alternation operator |, you could:
Use a basic regular expression (just grep) and escape the | character in the regular expression
grep "string1\|string2" my.file
Use an extended regular expression with egrep or grep -E, as Julian already pointed out in his answer
grep -E "string1|string2" my.file
If it is two different patterns that you want to match, you could also specify them separately in -e options:
grep -e "string1" -e "string2" my.file
You might find the following sections of the grep reference useful:
-e If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With