Bestanden en output aanpassen
Soms is de output van een bestand of commando niet helemaal hoe je het wilt.
In dat geval kan je de inhoud of de output van het bestand of commando aanpassen.
Inhoud aanpassen
In vorige hoofdstukken is al uitgelegd hoe je > & >> kan gebruiken in combinatie met commando's zoals echo om de inhoud van een bestand aan te passen.
Dat is een manier om kleine simpele stukjes tekst toe te voegen aan een bestand.
Maar als je iets ingewikkelder wilt doen is het onhandig.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Zoals notepad op Windows bestaan er ook tekstverwerkers voor de CLI in Linux.
Een van de bekendste is nano.
Je kan nano gebruiken om bestanden te bewerken en aan te maken.
Een bestand openen en deze dan bewerken:
Als het bestand nog niet bestaat, wordt deze automatisch aangemaakt.
Hier kan je gewoon typen wat je wilt. ^ betekent de Ctrl toets. M betekent de Alt toets.
Er zijn enkele belangrijke shortcuts die je kan gebruiken:
Ctrl+s: Bestand opslaan
Ctrl+x: Afsluiten
Ctrl+k: Hele regel of geselecteerde tekst knippen
Ctrl+u: Plakken
Alt+u: Ongedaan maken
Alt+e: Opnieuw doen
Ctrl+g: Help
Alt+m: Maakt het mogelijk om de muis te gebruiken
Output aanpassen
Er zijn veel commando's die de output van een bestand aanpassen.
Om de volledige onaangepaste output van een bestand te zien kan je cat gebruiken.
Een variant van cat is tac:
tac is cat maar dan van onder naar boven.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
head toont de eerste 10 regels van een bestand.
Je kan een nummer als argument geven om dat aantal regels te tonen.
tail toont de laatste 10 regels van een bestand.
Je kan een nummer als argument geven om dat aantal regels te tonen.
Je kan ook tail -f gebruiken om de laatste regels van een bestand te zien en nieuwe regels die toegevoegd worden. Dit is handig voor bijvoorbeeld een log bestand live te volgen.
less toont de inhoud van een bestand deel per deel.
Dit is wat er gebruikt wordt als je een man page bekijkt. Zo wordt niet alle tekst tegelijk op je scherm gezet, kan je scrollen en woorden zoeken zoals bij de man pages.
more toont de inhoud van een bestand deel per deel.
Dit is soortgelijk aan less, maar meer beperkt.
Je kan niet terug scrollen en deze is minder krachtig.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
grep
Er zijn verschillende commando's en technieken om de output van een bestand te filteren.
Het commando grep is een van de bekendsten. grep filtert de output en toont alleen de regels die overeenkomen met de zoekterm.
Je kan het ook gebruiken met een pipe.
Een aantal handige opties zijn:
-v: Toont de regels die niet overeenkomen met de zoekterm.-n: Toont het regelnummer van de gevonden regels.-c: Toont het aantal gevonden regels.-e: Kan meerdere keren gebruikt worden om extra zoektermen toe te voegen.-A1,B1,C1: After, Before, Context. Toont extra regels rond de gevonden regels.-E: Maakt het mogelijk om uitgebreide regex te gebruiken.
regex
Je kan ook regex gebruiken om complexere zoekopdrachten te doen.
Regex is een manier om patronen te zoeken in tekst.
Regex werkt met karakters die een specifieke betekenis hebben.
Hier zijn enkele voorbeelden van regex karakters:
*: Matcht 0 of meer karakters.+: Matcht 1 of meer van het vorige karakter.?: Matcht 0 of 1 van het vorige karakter..: Matcht elk karakter één keer.|: Of. Matcht het ene of het andere.(): Groepering. Matcht de tekst tussen de haakjes.{n}: Matcht precies n keer het vorige karakter.[a-z]: Matcht één karakter uit de opgegeven reeks (in dit geval een kleine letter in het alfabet).^[0-9]: Matcht een regel die begint met een cijfer.
Voorbeelden:
Output filteren
tee leest de input en schrijft deze naar de output.
Het is anders dan andere manieren om input te schrijven, want het stuurt de stdin verder naar de stdout, waardoor je het kan gebruiken met pipes.
Het is ook handig als je sudo nodig hebt voor naar een bestand te schrijven.
Om toe te voegen aan een bestand in de plaats van te overschrijven kan je -a gebruiken.
Het commando cut kan output scheiden.
Hier is -d ',' de "delimiter". Dat is het punt waar de tekst opgesplitst wordt.
-f1 zegt welk veld het moet tonen. In dit geval het eerste.
Het commando sort kan output sorteren.
Je kan het ook met pipes gebruiken.
Het commando uniq filtert dubbele regels uit de output.
Als de dubbele regels niet naast elkaar staan moet je eerst sort gebruiken.
Het commando wc telt het aantal regels, woorden en karakters in de output.
-l staat voor "lines", -w betekent "words" en -c is "characters".
Dit werkt natuurlijk ook met pipes.
Zo kan je bijvoorbeeld het aantal bestanden en folders zien.
Output veranderen
Het commando tr kan gebruikt worden om de output te veranderen.
Het staat voor "translate" en kan gebruikt worden om karakters te vervangen of te verwijderen.
Het werkt ook met regex.
Je kan ook meerdere karakters tegelijk vervangen.
Er zijn een paar handige argumenten die je kan gebruiken:
-d: Verwijdert de opgegeven karakters.-s: Vervangt opeenvolgende karakters door één karakter.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Een ander commando dat je kan gebruiken is sed.
Dit staat voor "stream editor" en kan gebruikt worden om tekst te vervangen, toe te voegen of te verwijderen.
Alleen het eerste voorkomen van "hallo" wordt vervangen. Je kan ook alle voorkomen van "hallo" vervangen met de g optie:
Om sed hoofdletter ongevoelig te maken kan je de i optie toevoegen:
Je kan ook meerdere commando's tegelijk uitvoeren met sed:
De d optie kan gebruikt worden om regels te verwijderen:
Commando's & Terminologie
Commando | Uitleg |
|---|---|
nano | Tekstverwerker voor de CLI. |
tac | Toont de inhoud van een bestand van onder naar boven. |
head | Toont de eerste 10 regels van een bestand. |
tail | Toont de laatste 10 regels van een bestand. |
less | Toont de inhoud van een bestand deel per deel. |
more | Toont de inhoud van een bestand deel per deel, maar is minder krachtig dan less. |
grep | Zoekt naar tekst in een bestand en toont de regels die overeenkomen. |
tee | Leest de input en schrijft deze naar de output, kan gebruikt worden met pipes. |
cut | Scheidt output op basis van een delimiter. |
sort | Sorteert de output. |
uniq | Filtert dubbele regels uit de output. |
wc | Telt het aantal regels, woorden en karakters in de output. |
tr | Vervangt of verwijdert karakters in de output. |
sed | Vervangt, voegt toe of verwijdert tekst in de output. |
Term | Uitleg |
|---|---|
Regex | Een manier om patronen te zoeken in tekst. |
Delimiter | Het punt waar de tekst opgesplitst wordt. |
Studeren
- Hoe sla je een bestand op in nano?
Met de shortcut Ctrl+s.
- Hoe sluit je nano af?
Met de shortcut Ctrl+x.
- Hoe bekijk je de inhoud van een bestand van onder naar boven?
Via het commando
tac.- Welk commando toont de eerste 10 regels van een bestand?
Het commando
head.- Welk commando wordt gebruikt als je een manpage opent?
Het commando
less.- Hoe zoek je naar een specifiek woord in een bestand of output?
Met het commando
grep.- Wat betekent [a-z] in regex?
Het matcht één karakter uit de opgegeven reeks (in dit geval een kleine letter in het alfabet).
- Wat doet + in regex?
Het matcht 1 of meer van het vorige karakter.
- Wat is het nut van het commando tee?
Het leest de input en schrijft deze naar de output, waardoor je het kan gebruiken met pipes en sudo.
- Wat doet het commando cut?
Het scheidt output op basis van een delimiter.
- Wat doet het commando sort?
Het sorteert de output.
- Wat doet het commando uniq?
Het filtert dubbele regels uit de output.
- Wat doet het commando wc?
Het telt het aantal regels, woorden en karakters in de output of in een bestand.
- Wat doet het commando tr?
Het vervangt of verwijdert karakters in de output.
- Wat doet het commando sed?
Het vervangt, voegt toe of verwijdert tekst in de output.
- Wat doet sed met s/w/p/?
Het vervangt de eerste "w" in de regel met "p".