[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