Tips en Trucs 2021

Specifieke regels uit een tekst halen

In Linux kan je met verschillende terminal opdrachten een specifieke regel afzonderen. Dit kan met een combinatie van head en tail opdrachten, een sed of een awk opdracht.

Testbestand aanmaken

Om te oefenen maken we het testbestand regels.txt aan met de volgende opdracht:

dany@pindabook:~> for i in {1..50}; do echo "Dit is regel $i" >> regels.txt; done

Met head en tail opdrachten

De eenvoudig te onthouden head en tail opdrachtencombinatie zorgt ervoor dat dit mijn favoriete methode is om een bepaalde regel weer te geven.

Een specifieke regel weergeven

Om een specifieke regel met een combinatie van head en tail opdrachten weer te geven, gebruik je de volgende vorm, waarbij x het gewenste regelnummer is:

head -x bestandsnaam | tail -1

Om bijvoorbeeld de dertiende regel uit het bestand regels.txt weer te geven, vervang je x door 13:

dany@pindabook:~> head -13 regels.txt | tail -1
Dit is regel 13

De head opdracht verzameld de eerste 13 regels van het regel.txt bestand, waarvan de laatste regel door tail wordt weergegeven. De volledige werking van zowel de head opdracht als de tail opdracht kan je steeds opvragen met behulp van de --help optie:

dany@pindabook:~> head --help
Gebruik:  head [OPTIE...] [BESTAND...]

Kopieert de eerste 10 regels van elk gegeven BESTAND naar standaarduitvoer.
Als meer dan één BESTAND gegeven is, wordt de uitvoer van elk bestand
voorafgegaan door een kopje met de bestandsnaam.

Zonder BESTAND, of wanneer BESTAND '-' is, wordt standaardinvoer gelezen.

(Een verplicht argument bij een lange optie geldt ook voor de korte vorm.)
  -c, --bytes=[-]AANTAL    de eerste AANTAL bytes van elk bestand tonen;
                             met een minteken, allen behalve de laatste AANTAL
  -n, --lines=[-]AANTAL    de eerste AANTAL regels tonen (i.p.v. de eerste 10);
                             met een minteken, allen behalve de laatste AANTAL
  -q, --quiet, --silent    geen bestandsnaamkopjes tonen
  -v, --verbose            altijd bestandsnaamkopjes tonen
  -z, --zero-terminated     regels afsluiten met 0-byte, niet met nieuweregel
      --help      deze hulptekst tonen en stoppen
      --version   programmaversie tonen en stoppen

NUM may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

Online hulp bij GNU coreutils: 
Meld vertalingsfouten aan .
Full documentation 
of lokaal via: info '(coreutils) head invocation'

Een reeks opeenvolgende regels weergeven

Misschien had je het al door, de tail opdracht bepaald namelijk hoeveel regels vanaf het einde worden weergegeven.

head -y bestandsnaam | tail -z

Hierbij worden z regels weergegeven tot en met regel y. Als we dus regel 20 tot en met regel 25 willen weergeven, wordt de opdracht:

dany@pindabook:~> head -25 regels.txt | tail -6
Dit is regel 20
Dit is regel 21
Dit is regel 22
Dit is regel 23
Dit is regel 24
Dit is regel 25

Veel eenvoudiger wordt het als je kunt opgeven van regel x tot regel y. En jawel dat kan:

head -y bestandsnaam | tail -n +x

Ons vorig voorbeeld wordt dan:

dany@pindabook:~> head -25 regels.txt | tail -n +20
Dit is regel 20
Dit is regel 21
Dit is regel 22
Dit is regel 23
Dit is regel 24
Dit is regel 25

Met de sed opdracht

De krachtige sed opdracht kan op verschillende manieren specifieke regels weergeven. Om de tiende regel weer te geven, gebruik je bijvoorbeeld:

dany@pindabook:~> sed -n '10p' regels.txt
Dit is regel 10

De -n optie onderdrukt het weergeven van de tekstregels, maar de '10p' optie zorgt dan weer dat regel 10 wordt weergegeven (geprint). De sed opdracht is zeer krachtig en heeft dan ook een uitgebreide handleiding, documentatie en voorbeelden die je kan raadplegen op de sed webpagina.

Om bijvoorbeeld van regel drie tot en met regel zeven weer te geven, gebruik je de volgende sed opdracht:

dany@pindabook:~> sed -n '3,7p' regels.txt
Dit is regel 3
Dit is regel 4
Dit is regel 5
Dit is regel 6
Dit is regel 7

Met de awk opdracht

De awk is zoals sed zeer krachtig, maar daardoor ook moeilijker om onder de knie te krijgen. Zoals sed wordt awk vooral gebruikt om tekstbestanden aan te passen en te manipuleren.

dany@pindabook:~> awk 'NR==5' regels.txt 
Dit is regel 5

De 'NR==5' optie zorgt dat het record (regel) met nummer 5 weergegeven word. Alle informatie over awk kan je vinden op de awk webpagina.

Om alle regels vanaf regel 20 tot en met regel 25 met awk weer te geven, gebruik je de volgende opdracht:

dany@pindabook:~> awk 'NR>=20 && NR<=25' regels.txt 
Dit is regel 20
Dit is regel 21
Dit is regel 22
Dit is regel 23
Dit is regel 24
Dit is regel 25

Zoals je kunt merken, gebruik je awk zoals een programmeertaal.

Opruimen

Dit was het voor deze tip, er rest ons enkel nog wat opruimwerk:

dany@pindabook:~> rm regels.txt
Specifieke regels weergeven met head tail sed en awk