Informatieve opdrachten

In deze sectie worden opdrachten besproken waarmee bestanden worden aangepast, opdrachten die een bepaalde bewerking op het bestand uitvoeren, of statistieken over het bestand leveren.

grep [-nvwx] [-nummer] expressie [bestand1 bestand2 ... bestandN]

Eén van de handigste opdrachten in Unix is grep, de generalized regular expression parser. Dit is een chique naam voor een utility dat alleen een tekstbestand kan doorzoeken. De eenvoudigste manier om grep te gebruiken gaat als volgt:


/home/larry# cat animals
Animals are very interesting creatures. One of my favorite animals is
the tiger, a fearsome beast with large teeth.
I also like the lion---it's really neat!
/home/larry# grep iger animals
the tiger, a fearsome beast with large teeth.
/home/larry#

Alhoewel het alle regels toont waarin het woord voorkomt, is een nadeel hiervan dat het je niet aangeeft waar in het bestand te zoeken, geen regelnummer. Afhankelijk van wat je aan het doen bent, kan dit prima zijn. Als je bijvoorbeeld op zoek bent naar fouten in de uitvoer van een programma, zou je a.out | grep error kunnen proberen, waarbij a.out de naam is van het programma. Als je er in bent geïnteresseerd waar de overeenkomsten zich bevinden, gebruik je de n switch van grep om het te vertellen regelnummers af te drukken. Gebruik de switch v als je alle regels wilt zien die niet overeenkomen met de opgegeven expressie. Een andere feature van grep is dat het alleen zoekt naar delen van een woord, zoals mijn voorbeeld hierboven waar iger overeenkwam met tiger. Om grep te vertellen alleen overeenkomsten te zoeken op hele woorden, gebruik je de w, en de x switch vertelt grep alleen overeenkomsten te zoeken met gehele regels. Als je geen bestanden opgeeft, zal grep stdin onderzoeken.

wc [-clw] [bestand1 bestand2 ... bestandN]

wc staat voor word count. Het telt eenvoudigweg het aantal woorden, regels en tekens in (het) bestand(en). Worden er geen bestanden in de opdrachtregel opgegeven, dan voert het de bewerking uit op stdin. De drie parameters, clw, staan respectievelijk voor character (teken), line (regel), en word (woord), en vertellen wc welke van deze drie te tellen. Dus wc -cw zal het aantal tekens en woorden tellen, maar niet het aantal regels. wc telt standaard alles: woorden, regels en tekens.

Een aardig gebruik van wc is uit te zoeken hoeveel bestanden er in de huidige directory aanwezig zijn: ls | wc -w. Probeer ls *.c | wc -w als je wilt zien hoeveel bestanden er eindigen op .c.

spell [bestand1 bestand2 ... bestandN]

spell is een zeer simpel Unix spellingsprogramma, gewoonlijk voor Amerikaans Engels.[1]spell is een filter, zoals de meeste andere programma's waar we het over hebben gehad, die een ASCII-tekstbestand als invoer neemt en alle woorden als uitvoer geeft die het als onjuist gespeld aanmerkt. spell werkt op de bestanden die op de opdrachtregel worden opgegeven, of als die er niet zijn, op stdin.

Een geraffineerder spellingsprogramma, ispell is waarschijnlijk ook beschikbaar op je machine. ispell biedt je een mogelijk correcte spelling aan en een fraaie menu-interface als op de opdrachtregel een bestandsnaam werd opgegeven of zal als een op filter-lijkend programma worden uitgevoerd als er geen bestanden werden opgegeven.

Ondanks dat de werking van ispell tamelijk vanzelfsprekend is, zou je de man page kunnen raadplegen als je meer hulp nodig hebt.

cmp bestand1 [bestand2]

cmp compares (vergelijkt) twee bestanden. De eerste moet op de opdrachtregel worden opgegeven, terwijl de tweede als de tweede parameter kan worden opgegeven of van standaardinvoer wordt ingelezen. cmp is erg simpel, en vertelt je louter waar de twee bestanden voor het eerst verschillen.

diff bestand1 bestand2

Een van de meest gecompliceerde Unix standaardopdrachten is diff. De GNU versie van diff kent meer dan twintig opdrachtregelopties! Het is een veel krachtiger variant van cmp en het toont je de verschillen in plaats van dat het je louter aangeeft waar het eerste verschil zich voordoet.

Aangezien het hebben over zelfs een goed deel van diff buiten het kader van dit boek valt, zal ik het gewoon hebben over de basiswerking van diff. Samengevat accepteert diff twee parameters en toont het de verschillen tussen deze parameters op een regel-voor-regel basis. Bijvoorbeeld:


/home/larry# cat frog
Animals are very interesting creatures. One of my favorite animals is
the tiger, a fearsome beast with large teeth.
I also like the lion---it's really neat!
/home/larry# cp frog toad
/home/larry# diff frog toad
/home/larry# cat dog
Animals are very nteresting creatures. One of my favorite animals is

the tiger, a fearsome beast with large teeth.
I also   like the lion---it's really neat!
/home/larry# diff frog dog
1c1,2
< Animals are very interesting creatures. One of my favorite animals is
---
> Animals are very nteresting creatures. One of my favorite animals is
> 
3c4
< I also like the lion---it's really neat!
---
> I also   like the lion---it's really neat!
/home/larry#

Zoals je kunt zien, geeft diff niets als uitvoer als de twee bestanden identiek zijn. Daarna vergeleek ik twee verschillende bestanden, het had een sectiekop, 1c1,2 aangevend dat het regel 1 van het linkerbestand aan het vergelijken was frog, met regels 1--2 van dog en welke verschillen het opmerkte. Toen vergeleek het regel 3 van frog met regel 4 van dog. Ondanks dat het in eerste instantie vreemd over kan komen dat er twee verschillende regelnummers worden vergeleken, is het veel efficiënter dan iedere enkele regel weer te geven als er zich eerder in een bestand een extra return bevindt.

gzip [-v#] [bestand1 bestand2 ... bestandN]

gunzip [-v] [bestand1 bestand2 ... bestandN]

zcat [bestand1 bestand2 ... bestandN]

Deze drie programma's worden gebruikt om gegevens te comprimeren en decomprimeren . gzip, van GNU Zip, is het programma dat de originele bestanden inleest en bestanden als uitvoer geeft die kleiner zijn. gzip verwijdert de bestanden die op de opdrachtregel werden opgegeven en vervangt ze door bestanden met identieke naam behalve dat er ".gz" aan is toegevoegd.

tr string1 string2

De opdracht "translate characters" werkt op standaardinvoer. Het accepteert als parameter geen bestandsnaam. In plaats daarvan zijn de twee parameters willekeurige strings. Het vervangt alle voorkomens van string1 in de invoer door string2. In aanvulling op relatief simpele opdrachten zoals tr frog toad, kan tr gecompliceerdere opdrachten accepteren. Hier is bijvoorbeeld een snelle manier om kleine tekens om te zetten in hoofdletters:


/home/larry# tr [:lower:] [:upper:]
dit is een VREEMDE zin.
DIT IS EEN VREEMDE ZIN.

tr is tamelijk complex en het wordt gewoonlijk in kleine shell-programma's gebruikt.

Noten

[1]

Ondanks dat hier versies zijn voor verscheidene andere Europese talen, is de kopie op je Linux machine zeer waarschijnlijk voor Amerikaans-Engels.