Wyrażenia regularne (ang. regular expressions, regex, regexp) to wzorce używane do wyszukiwania i przetwarzania tekstu. Pozwalają definiować złożone kryteria wyszukiwania, obejmujące pojedyncze znaki, grupy znaków, powtarzające się wzorce i wiele innych konstrukcji.
POSIX BRE (Basic Regular Expressions) i ERE (Extended Regular Expressions) to dwa warianty składni wyrażeń regularnych. BRE jest bardziej ograniczony i wymaga użycia znaków ucieczki (backslash) w niektórych konstrukcjach, podczas gdy ERE oferuje bardziej rozbudowaną składnię, w której nie trzeba ich stosować.
| Konstrukcja | BRE | ERE |
|---|---|---|
| Dowolny pojedynczy znak | . | . |
| Klasa znaków | [abc] | [abc] |
[a-z] | [a-z] |
|
| Klasa wykluczająca | [^abc] | [^abc] |
| Początek linii | ^ | ^ |
| Koniec linii | $ | $ |
| Zero lub więcej | a* | a* |
| Jedno lub więcej | a+ | a+ |
| Zero lub jedno | a? | a? |
| Powtórzenia {n} razy | a{2} | a{2} |
| Powtórzenia {n,m} | a{2,4} | a{2,4} |
| Grupowanie | (abc) | (abc) |
| Alternatywa | (abc|def) | (abc|def) |
| Granice słowa (GNU) | <word> | <word> |
| Program | BRE | ERE |
|---|---|---|
| grep | grep 'pattern' file | grep -E 'pattern' file |
| egrep | egrep 'pattern' file |
|
| sed | sed -n '/pattern/p' file | sed -E -n '/pattern/p' file |
| awk | awk '/pattern/ {print}' file |
|
| bash (if) | if [[ $var =~ pattern ]]; then … fi |
Dopasowanie adresu e-mail:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
Dopasowanie daty w formacie dd/mm/yyyy:
[0-9]{2}/[0-9]{2}/[0-9]{4}
Dopasowanie słowa zaczynającego się na „a” i kończącego na „e”:
\<a\w*e\>
grep 'a.*e' /usr/share/dict/words
ls /bin | grep -E '^.{3}$'
grep '^a.*e$' /usr/share/dict/words
grep 'a.*a.*a' /usr/share/dict/words
grep -v '^$' plik.txt