O wyrażeniach regularnych w egrep.

Pisane przez Zepha Grunschlaga

egrepis jest akronimem od „Extended Global Regular Expressions Print”. Jest to program, który skanuje określony plik linia po linii, zwracając linie, które zawierają wzór pasujący do podanego wyrażenia regularnego.

Standardowe polecenie egrep wygląda następująco:

egrep<flags> '<regularexpression>’ <filename>

Niektóre z popularnych flag to: -c do zliczania liczby udanych dopasowań i nie drukowania rzeczywistych dopasowań, -i, aby wyszukiwanie było niewrażliwe na wielkość liter, -n, aby drukować numer wiersza przed wydrukiem każdego dopasowania, -v, aby wziąć dopełnienie wyrażenia regularnego (tj. zwrócić wiersze, które nie pasują), oraz -l, aby wydrukować nazwy plików z wierszami pasującymi do wyrażenia.

Wyrażenia regularne występują we własnym wariancie egrep (jest to bardzo podobne do wyrażeń regularnych występujących w emacs, perl, itp.)

(Grecka litera ε (epsilon) reprezentuje pusty łańcuch)

Jedną z głównych różnic pomiędzy wyrażeniami regularnymi egrep i teoretycznymi wyrażeniami regularnymi jest to, że w egrep, dopasowania mogą wystąpić w dowolnym miejscu łańcucha, podczas gdy w teoretycznym użyciu, dopasowania zawsze zaczynają się od pierwszego znaku łańcucha i kończą na ostatnim znaku. Na przykład, rozważmy łańcuch 000001000. W egrep, wyrażenie regularne 010 daje dopasowanie; z drugiej strony, teoretyczne wyrażenie regularne 010 nie pasuje do 000001000, ponieważ 010 i 000001000 nie są równe. Teoretycznym odpowiednikiem egrep’owskiego 010 jest (0+1)*010(0+1)*. Co jeśli faktycznie chcesz rozważyć początek i koniec łańcucha? egrep udostępnia symbol ^ dla określenia początku i symbol dolara $ dla końca. Tak więc egrepowy odpowiednik teoretycznego 010 jest dany przez ^010$ .

Inną użyteczną parą egrepsymboli są granice słów ^< i ^5567>, które odpowiednio oznaczają początek i koniec słowa.

Aby określić zestaw lub zakres znaków, użyj nawiasów klamrowych. Aby określić zestaw, użyj symbolu kapelusza ^ jako pierwszego znaku. Na przykład

  • jest zbiorem { a, 9, A, 0, 5 }
  • to komplementarny zestaw ASCII – { a, 9, A, 0, 5 } (wszystko oprócz a, 9, A, 0 i 5).
  • jest zbiorem wszystkich małych liter { a, b, c, d, …, z }
  • jest zbiorem wszystkich liter ASCII z wyjątkiem małych liter, cyfr od 4 do 9 oraz wielkich liter Q i R.

Kilka przykładów:

  • egrep '^(0|1)+ +$’ searchfile.txt

dopasuj wszystkie linie w searchfile.txt, które zaczynają się od niepustego ciągu bitów, po którym następuje spacja, a następnie niepuste słowo alfabetyczne, które kończy linię

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.