GNU grep ondersteunt uitgebreide reguliere expressies en is in elke distributie standaard geïnstalleerd. We gebruiken de grep terminal opdracht om informatie op een computer of server op te sporen.
Een reguliere expressie is een patroon waaraan een ingevoerde regel moet voldoen.
Dit patroon is een opeenvolging van karakters. Een paar voorbeelden:
^w1
w1|w2
[^ ]
Zoeken naar 'daemon' in /etc/passwd:
grep daemon /etc/passwd
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash avahi:x:103:106:User for Avahi:/var/run/avahi-daemon:/bin/false daemon:x:2:2:Daemon:/sbin:/bin/bash lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false ntp:x:74:104:NTP daemon:/var/lib/ntp:/bin/false pulse:x:105:108:PulseAudio daemon:/var/lib/pulseaudio:/sbin/nologin sshd:x:101:102:SSH daemon:/var/lib/sshd:/bin/false statd:x:106:65534:NFS statd daemon:/var/lib/nfs:/sbin/nologin wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false usbmux:x:107:65534:usbmuxd daemon:/var/lib/usbmuxd:/sbin/nologin
Zoek hoofdletterongevoelig naar 'daemon' in /etc/passwd:
grep -i -w daemon /etc/passwd
Zoek in /etc/passwd hoofdletterongevoelig naar 'daemon' of 'nobody':
grep -E -i -w 'daemon|nobody' /etc/passwd
Het patroon in het laatste voorbeeld gebruikt een uitgebreide reguliere expressie.
Je kunt ^ of $ gebruiken in reguliere expressies het begin of het einde van een regel aan te duiden.
Het volgende voorbeeld toont enkel regels die beginnen met daemon:
grep ^daemon /etc/passwd
Zoek in /etc/passwd naar regels die eindigen op login:
grep 'login$' /etc/passwd
Zoek in /etc/filesystems naar regels die enkel het woord vfat bevatten:
grep '^ntfs$' /etc/filesystems
Zoek in /etc/filesystems naar lege regels:
grep '^$' /etc/filesystems
Zoek in /etc/services naar echo of Echo:
grep '[eE]cho' /etc/services
Of:
grep '[eE][cC][hH][oO]' /etc/services
Zoek in /etc/services naar twobase gevolgd door 2 cijfers:
grep 'twobase[0-9][0-9]' /etc/services
Dit is niet beperkt tot cijfers, zoek in /etc/services naar regels die beginnen met een letter:
grep '^[A-Aa-z]' /etc/services
Zoek in /etc/services naar regels die eindigen op w of q:
grep '[wq]$' /etc/services
Zoek naar in /etc/services naar regels die beginnen met een hoofdletter:
grep '^[[:upper:]]' /etc/services
Je kunt een punt gebruiken om een enkel teken voor te stellen.
Het voorbeeld zoekt in /etc/services naar woorden met drie letters die beginnen met a en eindigen op i:
grep '\<a.i\>' /etc/services
Daarbij staat de expressie \< voor het begin van een woord en \> voor het einde van een woord.
Zoek in /etc/services naar regels die uit juist vier tekens bestaan:
grep '^....$' /etc/services
Zoek in /etc/services naar regels die eindigen op een cijfer en een punt:
grep '[0-9]\.$' /etc/services
De volgende reguliere expressie om het IP adres 192.219.82.71 in /etc/services te zoeken, werkt niet altijd zoals het hoort:
grep '192.219.82.71' /etc/services
De drie punten moet je escapen (letterlijk en niet als joker gebruikt worden):
grep '192\.219\.82\.71' /etc/services
De volgende opdracht zoekt in /etc/services naar IP adressen:
egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' /etc/services
Gebruik de optie -e om te zoeken naar '-https'.
Zonder de -e optie beschouwt grep -https als een optie voor grep zelf en niet een op te sporen patroon:
grep -e '-https' /etc/services
Om in /etc/services zowel naar het woord server als naar het woord client te zoeken, gebruik je de opdracht:
grep -E 'server|client' /etc/services
Om in /etc/services naar regels te zoeken die zowel het woord server en het woord vnc bevatten, gebruik je de opdracht:
grep 'server' /etc/services | grep 'vnc'
Gebruik de volgende schrijfwijzen om een reeks van dezelfde tekens te definiëren:
{N}
{N,}
{min,max}
In /etc/services zoeken naar twee t's:
egrep 't{2}' /etc/services
Zoek in /etc/services naar de woorden bos en boos:
egrep 'bo{1,2}s' /etc/services
Zoek in /etc/services naar minstens drie opeenvolgende cijfers 8:
egrep '8{3,}' /etc/services
Het volgende voorbeeld zoekt naar het woord RFC gevolgd door vier cijfers:
grep "RFC[[:digit:]]\{4\}" /etc/services
Zoek naar het woord server in /etc/services en geef de gevonden woorden benadrukt weer:
grep --color 'server' /etc/services
Regex operator | Betekenis |
---|---|
. | Stelt één teken voor. |
? | Het voorafgaande onderdeel is facultatief en mag ten hoogste één keer voorkomen. |
* | Het voorafgaande onderdeel mag niet of verschillende keren voorkomen. |
+ | Het voorafgaande onderdeel moet minstens één keer voorkomen. |
{N} | Het voorafgaande onderdeel moet exact N keer voorkomen. |
{N,} | Het voorafgaande onderdeel moet minstens N keer voorkomen. |
{N,M} | Het voorafgaande onderdeel moet minstens N keer, maar niet meer dan M keer voorkomen. |
- | Wordt in een bereik van een lijst tussen het begin- en het eindonderdeel geplaatst. |
^ | Stelt het begin van een regel voor of tekens die niet in het bereik van een lijst voorkomen. |
$ | Stelt het einde van een regel voor. |
\b | Stelt een lege tekenreeks bij het uiteinde van een woord voor. |
\B | Stelt een lege tekenreeks voor die geen uiteinde van een woord is. |
\< | Stelt een lege tekenreeks voor aan het begin van een woord. |
\> | Stelt een lege tekenreeks aan het einde van een woord voor. |
De opdracht egrep
is hetzelfde als grep -E
.
Het interpreteert het patroon als een uitgebreide reguliere expressie.
Raadpleeg de handleidingen (man-pagina's) van grep en regex om alle mogelijkheden van zowel grep als het gebruik van reguliere expressies onder de knie te krijgen.