egrep

Wyszukuje linie pasujące do rozszerzonego wyrażenia regularnego (odpowiednik grep -E).

egrep to wyszukiwarka tekstu, która przeczesuje pliki (albo strumień ze standardowego wejścia) i wypluwa linie pasujące do rozszerzonego wyrażenia regularnego (ERE). W praktyce to dokładnie to samo co grep -E — dostajesz pełnię regexowej składni bez zaśmiecania wzorca odwrotnymi ukośnikami. Używasz go, gdy chcesz znaleźć coś w logu, kodzie albo konfigu i potrzebujesz alternatyw, grupowania czy kwantyfikatorów bez ezoterycznego escapowania.

Składnia i najważniejsze opcje

Podstawowa forma: egrep [opcje] WZORZEC [plik...]

  • -i — ignoruje wielkość liter (case-insensitive).
  • -r / -R — przeszukuje katalogi rekurencyjnie (-R idzie też za dowiązaniami).
  • -n — dopisuje numer linii do każdego trafienia.
  • -v — odwraca dopasowanie: pokazuje linie, które nie pasują.
  • -c — zamiast linii zwraca samą liczbę trafień.
  • -o — drukuje tylko dopasowany fragment, nie całą linię.
  • -l — wypisuje tylko nazwy plików zawierających dopasowanie.
  • -w — dopasowuje tylko całe słowa, nie fragmenty wyrazów.

Przykłady użycia

  • egrep 'error|fail|warn' /var/log/syslog — wyłapuje linie z dowolnym z trzech słów; alternatywa | działa od ręki, bez escapowania.
  • egrep -i 'colou?r' style.css — znajduje zarówno color, jak i colour, ignorując wielkość liter.
  • egrep -rn 'TODO|FIXME' ./src — rekurencyjnie szuka znaczników w kodzie i pokazuje plik oraz numer linii.
  • egrep -c '^[0-9]{3}\.' access.log — liczy linie zaczynające się od trzech cyfr i kropki (np. kody statusu).
  • ps aux | egrep -v 'grep' | egrep 'nginx' — filtruje listę procesów, odsiewając przy okazji samo polecenie grep.

Częste błędy i pułapki

Najważniejsze: w nowoczesnym GNU grep (od wersji 3.8 z 2022 roku) egrep jest uznany za przestarzały i przy uruchomieniu wypisuje ostrzeżenie w stylu „egrep: warning: egrep is obsolescent; using grep -E”. Polecenie nadal działa, ale w skryptach lepiej od razu pisać grep -E — pewnego dnia egrep może zniknąć z systemu.

Druga pułapka to ERE kontra zwykły regex (BRE). W egrep metaznaki +, ?, |, () i {} są aktywne bez ukośnika. Jeśli przyzwyczaiłeś się do klasycznego grep, gdzie pisałeś \( i \{, tutaj te ukośniki zadziałają odwrotnie — będą szukać dosłownego nawiasu.

Zawsze opakowuj wzorzec w apostrofy '...', żeby powłoka nie próbowała sama rozwinąć znaków takich jak *, | czy $. I pamiętaj: egrep domyślnie czyta z wejścia, więc samo egrep wzorzec bez pliku po prostu zawiśnie, czekając na tekst.

Powiązane komendy: grep, fgrep (grep -F), ripgrep (rg), sed, awk.