How to use regex OR in 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:

  1. Use a basic regular expression (just grep) and escape the | character in the regular expression

    grep "string1\|string2" my.file

  2. Use an extended regular expression with egrep or grep -E, as Julian already pointed out in his answer

    grep -E "string1|string2" my.file

  3. 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:

Leave a Comment