Weźmy na przykład to polecenie:
find . -regex ".*\.\(cpp\|h\)"
To znajdzie wszystkie pliki .h i .cpp w twoim katalogu. Znak kropki „.” w wyrażeniach regularnych zwykle oznacza „dowolny znak”. Aby dopasować go tylko do rzeczywistego okresu, musisz uciec z niego, używając znaku odwrotnego ukośnika „\”.
W takim przypadku, mając znak o specjalnym znaczeniu, musisz uciec z niego, aby uzyskać rzeczywisty znak, który reprezentuje.
Teraz weź nawias i pasek „lub”, będące odpowiednio znakami „(”, „)” i „|”. Mają także specjalne znaczenie, używane do grupowania wyrażeń regularnych. Jednak, aby uzyskać specjalne znaczenie, znaki muszą być poprzedzone odwrotnym ukośnikiem! Bez ukośnika znaki mają znaczenie, które reprezentuje.
Dlaczego jest '.' traktowane inaczej niż „(”, „)” i „|”?
źródło