home       inleiding       sysadmin       services       tools       bash       werk       nothing      

Inhoudsopgave

tools & data 2

Hier zijn enkele eenvoudige en duidelijke voorbeelden van grep, egrep, sed, awk en regex, telkens met het commando en het verwachte resultaat.
Maak zelf een fictief tekstbestand genaamd
log.txt in je $HOME directory met de volgende inhoud:
(die kun je copy-pasten)

INFO: Systeem gestart om 08:00
WARNING: Hoge temperatuur gedetecteerd
ERROR: Sensor niet gevonden
INFO: Update voltooid om 09:15
ERROR: Verbinding verbroken
  1. grep : zoek naar exacte woorden ...
    ... (we zoeken naar regels die het woord “ERROR” bevatten) ...
    • user@c-vbox:~$ grep "ERROR" log.txt
    • resultaat:
      ERROR: Sensor niet gevonden
      ERROR: Verbinding verbroken
  2. egrep: gebruik van uitgebreide patronen ... de "|" betekent of
    ... (we zoeken naar regels die het woord “ERROR” of "WARNING" bevatten) ...
    • user@c-vbox:~$ egrep "ERROR | WARNING" log.txt
    • resultaat:
      WARNING: Hoge temperatuur gedetecteerd
      ERROR: Sensor niet gevonden
      ERROR: Verbinding verbroken
  3. grep met regex: zoeken op patroon met regular expression
    ... (we zoeken naar regels die beginnen met "INFO" daarvoor dient de ^ ) ...
    • user@c-vbox:~$ grep "^INFO" log.txt
    • resultaat:
      INFO: Systeem gestart om 08:00
      INFO: Update voltooid om 09:15
  4. grep met regex: zoeken op tijdstip(pen)
    ... (we zoeken naar tijdstippen in formaat "hh:mm".
    ... De \{2\} betekent “exact twee cijfers”.)
    • user@c-vbox:~$ grep "[0-9]\{2\}:[0-9]\{2\}" log.txt
    • resultaat: (zelfde als hier net boven)
      INFO: Systeem gestart om 08:00
      INFO: Update voltooid om 09:15
  5. awk is meer een programmeertaal voor het verwerken van gestructureerde gegevens, terwijl grep primair bedoeld is voor het zoeken naar tekstpatronen. awk kan patronen vinden en vervolgens complexe bewerkingen uitvoeren, zoals het extraheren van velden en rekenkundige berekeningen, wat verder gaat dan de simpele zoekfunctie van grep. Hieronder enkele voorbeelden ...
    .
    We gebruiken een fictief bestand log.txt met de volgende inhoud:
    INFO: Systeem gestart om 08:00 
    WARNING: Hoge temperatuur gedetecteerd 
    ERROR: Sensor niet gevonden 
    INFO: Update voltooid om 09:15 
    ERROR: Verbinding verbroken

    5a. grep "ERROR" log.txt

    • resultaat:
      ERROR: Sensor niet gevonden
      ERROR: Verbinding verbroken
  6. awk: toon alleen tijdstippen ...
    awk -F"om " '/INFO/ {print $2}' log.txt
    -resultaat: (al kan je hier niet zoveel me doen)
    08:00
    09:15
     
  7. sed: vervang ERROR door FOUT
    sed 's/ERROR/FOUT/' log.txt
    • resultaat:
      INFO: Systeem gestart om 08:00
      WARNING: Hoge temperatuur gedetecteerd
      FOUT: Sensor niet gevonden
      INFO: Update voltooid om 09:15
      FOUT: Verbinding verbroken

Zelfs een simpele grep-regel kan een drempelmoment zijn.
Zelfs een awk-lus kan iets onthullen wat je niet zocht.
En zelfs een sfinx met regex heeft ooit moeten beginnen met ^hello$.