Linux

Vinden in bestanden

grep and regular expressions

Leerdoelen

  • We gaan data zoeken in bestanden op een Linux systeem
  • We gaan zoeken met hele woorden
  • We gaan leren wat reguliere expressies zijn

Zoeken in bestanden

  • Als je wilt weten of een bepaald woord in een bestand staat
  • Bijvoorbeeld in een configuratie of log bestand
    • Zoeken op datum en/of tijd in een log-bestand
    • Zoeken naar een term in een configuratie bestand

grep

  • Global Regular Expression Parser: grep
  • Het gaat om: Regular Expression
    • Een reeks karakters die een patroon beschrijven
    • Er zijn verschillende standaarden die reguliere expressies beschrijven, wij gebruiken BRE
  • grep matched per regel, dus als de zoekstring voorkomt in een regel wordt de gehele regel afgebeeld. Een regel is vanaf het eerste character tot en met de new-line

Werken met grep

  • Zoek in een bestand op de letters TACA
    grep TACA /etc/services
  • Met -i is het case insensitive
    grep -i TACA /etc/services
  • Met -n krijg je ook het regelnummer
    grep -ni TACA /etc/services
  • Het niet matchen gebeurt met -v
  • Dus grep -v <expressie> zorgt ervoor dat elke regel waarin "expressie" staat niet wordt weergegeven

Wat we niet willen zien

  • Het niet matchen gebeurt met -v:
    grep -v <expressie>
    elke regel waar "expressie" in staat wordt niet weergegeven
    grep -v NAME /etc/os-release
  • laat alle regels zien, behalve als er NAME in voorkomt
  • Gebruik grep om te zien wat we niet zagen:
    grep NAME /etc/os-release

Regular expressions

Werken met Regular expressions

sudo grep ^nameserver /etc/resolv.conf
grep localhost$ /etc/hosts
grep -v ^'#' /etc/resolv.conf
Laat alle regels weg die beginnen met een #
find /usr/share/man | grep ^/usr.*man[^1234]$

Recursief zoeken

  • Met grep kan je ook recursief zoeken
    grep -r
  • Recursief: ook alle subdirectories
  • Het maakt grep niet uit of het een tekstbestand is of een binary, grep doorzoekt hem
  • Pas dus op met waar je zoekt
sudo grep -H -r 127.0.0.1 /etc/*

grep opdracht

Als we willen weten waar onze hostname geconfigureerd staat kunnen we dat zo doen:
hostname
my-hostname
sudo grep -H -r 'my-hostname' /etc/* | grep -v ssh
Beschrijf wat de opdracht achter sudo doet

sed

  • Stream editor
  • A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).
    • Werkt op tekst regels
    • Kan wijzigingen doen op deze regels
    • Regels kunnen komen uit een bestand of uit een pipeline

Samenvatting

  • We hebben leren werken met grep
    • grep zoekt in bestanden naar patronen
  • We hebben leren werken met regular expressions:
    • ^ en $ voor begin en eind van de regel
    • . en .* voor 0 of meer characters
    • [...] voor reeksen