Home
Spiekbriefje
HOWTO's NL
Kabel internet
Poortnummers
IT begrippen
Default Passwords
   
Bestanden doorzoeken met grep-opdrachten

Nu gaan we kennis maken met de groep van grep-opdrachten
We gaan hier in op grep, egrep en fgrep
Om met deze opdrachten te kunnen werken, is het van belang dat je weet hoe enkele van de hiervoor besproken technieken voor patroonvergelijking gebruikt
Met de genoemde grep-opdrachten kan je bestanden doorzoeken en bepaalde tekst uit bestanden laten weergeven
Alle grep opdrachten zijn gebaseerd op het regel voor regel laten weergeven van bestanden
Je kunt ook afzonderlijke bestanden doorzoeken, maar ook groepen van bestanden

De verschillende grep-opdrachten werken op globaal dezelfde manier en allemaal kennen ze bijna twintig verschillende opties
Het enige echte verschil is dat de opdracht egrep gebruikmaakt van een iets afwijkende syntaxis voor patroonvergelijking, terwijl fgrep werkt met vaste strings
We zullen van elk van deze opdrachten voorbeelden geven, waarbij we enkele veelgebruikte opties toepassen

Om de verschillen in syntaxis van de zoekpatronen van deze programma's te demonstreren, zullen we hier diverse zoekpatronen loslaten op de Linux Basic Installation Guide van Matt Welsh

Als je bijvoorbeeld in deze handleiding alle regels wilt opzoeken die beginnen met een cijfer, gebruik je de volgende syntaxis:

# grep ^[0-9] guide.txt
1 Introduction to Linux
2 Obtaining and Installing Linux
3 Linux Tutorial
4 System Administration
 ...
# egrep ^[0-9] guide.txt
1 Introduction to Linux
2 Obtaining and Installing Linux
3 Linux Tutorial
4 System Administration
 ...
 # fgrep ^[0-9] guide.txt

1
40
85
137


1
40
85
137
Je ziet dat zowel grep als egrep zoekresultaten pleveren(we hebben hier steeds alleen de eerste vier regels van de uitvoer weergegeven)
Het blijkt echter dat fgrep niet met reguliere expressies werkt; je kan fgrep alleen met vaste patronen of strings gebruiken, zaols in het volgende voorbeeld:

# fgrep friend guide.txt
Large extent by the window manager.     This friendly program is in copy Linux from a friend who may already have software, or share (Unfortunately, the system was being unfriendly.)
Probeer nu eens om met behulp van egrep de tekst te doorzoeken op de letter b tussen haakjes:

# egrep '\([b]\)' guide.txt
( see Section 1.8 for a list of compatible boards), or (b) there is an connect to the network, or (b) you have a "dynamic" IP address,
Het blijkt dat in het bestand precies twee regels voorkomen met de tekens (b)
Laten we eens kijken wat er gebeurt als we hetzelfde doen met de opdracht grep:

# grep '\([b]\)' guide.txt
This is version 2.2.2 of the book, 'Linux Installation and Getting to PostScript printers. This document was generated by a set of tools from laTeX source, so there may be a number of formatting problems.
This is not the 'official' version of the book! Plaese see
 ...
Oeps dat was niet helemaal de bedoeling!
Zoals je ziet , gebruikt grep een andere syntaxis dan egrep
Het kan eenvoudiger:

# grep '(b)' guide.txt
( see Section 1.8 for a list of compatible boards), or (b) there is an connect to the network, or (b) you have a "dynamic" IP address,
Dit zoek patroon werkt zoawel met grep als met fgrep
als je dit patroon gebruikt met egrep, krijg je hetzelfde resultaat als wanneer je uitgebreide reguliere expressies gebruikt met grep(in dit geval dus alle regels waarop de letter b voorkomt)

De verschillende grep-programma's werken met bijna dezelfde verzameling opties
Een veel gebruikte optie is -n, voor regelnummering
Met deze optie zie je direct welke regels in de tekst de gezochte patronen bevatten
Deze optie werkt met alle grep-opdrachten:

# egrep -n friend guide.txt
1242: Large extent by the window manager.     This friendly program
1942: Linux from a friend who may already have the software,
5161: (Unfortunately , the system was being unfriendly.)
Je ziet dat de gezochte tekst is gevonden op regel 1242,1942 en 5161
Verder is het ook erg handig dat niet voor iedere herhaalde zoekactie de zoekpatronen opnieuw hoeft op te geven
Als je bijvoorbeeld verschillende bestanden wilt doorzoeken op steeds dezelfde woorden, dan kun je deze woorden in een tekstbestand opnemen, dat vervolgens door grep wordt gebruikt
Maak eerst het tekst bestand aan en gebruik vervolgens grep met de optie -f om aan te geven dat je dit tekstbestand wilt gebruiken:

# cat > mywords
wonderful
Typewriter
War
# grep -nf mywords guide.txt
574: Typewriter Used to represent screen interaction, as in
617: software since the orginal Space War, or, more recently
1998: Now you must be convinced of how wonderful way to relieve the
2549: inanimate object is a wonderful way to relieve the
3790:   Warning : Linux cannot currently use 33090 sectors
7780: the magic hat when it is not needed, despite the wondeful
10091: wonderful programs and configurations are availeble with a
Let er hierbij op dat je de optie -n (voor regelnummers) voor de optie -f plaatst ander krijg je een foutmelding waarin grep zegt dat het bestand met de naam n niet kan worden gevonden en de zoekactie daarom wordt afgebroken

Met de optie -F werkt grep op dezelfde manier als fgrep en met de optei -E als egrep
Verder kun je op je systeem ook nog een andere versie van grep vinden, de opdracht zgrep, die geschikt is om gecomprimeerde bestanden mee te doorzoeken