[linux] grep werkt -- maar niet zoals je hoopte

Daniel C. von Asmuth asmuth op bakunin.xs4all.nl
Do Jun 18 11:09:01 CEST 2020


Aldus schreef Jan Paul Smit op Wed, Jun 17, 2020 at 11:14:59AM +0200:
> Op di 16 jun. 2020 om 12:00 schreef <linux-request op lists.nllgg.nl>:
> 
> > > > Nu ben ik op zoek naar een mogelijkheid om al mijn documenten op een
> > > > bepaald woord te doorzoeken.
> > > > Via
> > > >
> > > > _https://nl.wikihow.com/Een-bestand-zoeken-in-Linux_
> > > >
> > > > kwam ik bij de opdracht grep.
> > > >
> > > > In het Terminalvenster typ ik:
> > > >
> > > > grep -r -i ?fiets? /home/jan-paul/Documenten
> > > >
> > > > om al mijn bestanden in de map Documenten te doorzoeken op het woord
> > > > fiets.
> >
> > >> Je hebt bestanden en je hebt bestanden. M.a.w. niet elk bestandstype
> > wordt
> > >> op dezelfde wijze behandeld.
> > >>
> > >> Grep werkt, als ik het goed heb begrepen het beste met "platte text"
> > >> bestanden.
> > > Grep is gemaakt om een tekenreeks op te kunnen halen.
> > > Als de tekenreeks, string,  voorkomt in het bestand,
> > > dan wordt ie ook getoond.  "platte text bestanden" hebben
> > > tekenreeksen die je makkerlijk als parameter van grep intypt.
> > >
> > Het probleem zit hem vermoedelijk daarin dat grep is geschreven om te
> > zoeken
> > in platte ASCII tekst en dat veel 'documenten' andere bestandsformaten
> > hebben.
> >
> > Er zijn wel oplossingen bedacht voor 'desktop search' die ook werken met
> > een
> > index, vergelijkbaar met DuckDuckGo, Google of Bing. Lees dus onderstaande
> > eens:
> >         https://wiki.debian.org/FullTextSearch
> >         https://www.linuxlinks.com/desktopsearchengines/
> >         https://dtsearch.com/   (geen gratis software)
> >
> > https://www.linuxuprising.com/2019/05/drill-new-desktop-file-search-utility.html
> >         https://linuxhint.com/best-self-hosted-search-engines/
> >
> > Bij een zoekactie met grep kreeg ik 6 hits, waarvan 3 doc-bestanden
> > (Microsoft Word 97), 1 rtf-bestand en 1 txt-bestand. Ik herinner mij een
> > andere zoekactie waarbij ik ook html-bestanden kreeg.
> > Er zijn een hele serie doc-bestanden met het betreffende zoekwoord die
> > grep niet gevonden heeft.

Dit bevestigt mijn vermoeden: u probeert binaire bestanden te doorzoeken 
met 'grep'. Een echte Unix hacker maakt bestanden in 7-bits ASCII met vi, 
niet met LibreOffice.

In sommige gevallen zal grep gezochte strings ook terugvinden, maar daar 
kunt u niet op rekenen. U moet dus eerst de tekst uit een bestand 
extraheren, voordat u erin kunt zoeken met grep; waarschijnlijk wilt u 
dus iets anders dan alleen grep gebruiken. Bekijk de links in mijn 
antwoord hierboven a.u.b. nog eens.

Het oude woord voor fiets is vélocipède. Als u daarmee gaat zoeken in 
een tekstbestand, dan hebt u grote kans dat u het niet vindt, afhankelijk 
van de tekenset waarin dat bestand gecodeerd is. In platte tekst is dat 
echter moeilijk te achterhalen. In een HTML-bestand kan dat woord 
gecodeerd zijn als vélocipède of als vélocipède 
en dan zal grep daar ook moeite mee hebben. Of misschien is het hele 
bestand gecodeerd in ISO 8859-1 of UTF-3. Ik heb laatst geprobeerd te 
zoeken in bestandsnamen met diakritische tekens, maar ook dat valt niet 
mee.

Met vriendelijke groet,



Daniel von Asmuth

-- 
	
		How long it takes to reach your goal
		depends less on your speed than on your direction.


Meer informatie over de Linux maillijst