Betaalmethoden Abuse

Bestanden doorzoeken op inhoud in Linux: ack en ripgrep

03.05.2023, 23:33

Zoeken naar bestanden op inhoud in Linux kan de tijd en moeite aanzienlijk verminderen bij het zoeken naar specifieke informatie in grote en complexe bestandssystemen.

Waarom je naar bestanden moet zoeken op inhoud

Deze zoekopdracht kan vooral handig zijn als je bestanden wilt vinden die een bepaalde tekenreeks of trefwoord bevatten, of als je alle bestanden wilt vinden die aan een bepaald patroon of criterium voldoen.

Zoeken naar bestanden op inhoud kan worden gebruikt voor verschillende taken, zoals het vinden van:

  • specifieke tekst in grote tekstbestanden
  • configuratiebestanden en scripts die bepaalde instellingen of opdrachten bevatten
  • bestanden die specifieke gegevens bevatten, zoals gebruikersnamen of telefoonnummers
  • bestanden op inhoudstype, zoals het vinden van alle bestanden die JPEG-afbeeldingen of PDF-documenten bevatten.

Het algemene doel van het zoeken van bestanden op inhoud is om het makkelijker te maken om met het bestandssysteem te werken en de informatie te vinden die je nodig hebt in het bestandssysteem.

ack

Laten we beginnen met het hulpprogramma ack. Het werd in 2005 gemaakt als alternatief voor grep en werd al snel populair onder ontwikkelaars.

Het heeft verschillende voordelen ten opzichte van grep, waaronder

  • slimmer zoeken in bestanden en uitzonderingen. Ack zoekt standaard alleen in bestanden die zinvol zijn, bijvoorbeeld door .svn of .git mappen uit te sluiten. En je kunt je eigen regels en uitzonderingen toevoegen;
  • Ack zoekt standaard in verborgen bestanden en mappen;
  • Ack probeert niet overal te zoeken, zelfs niet in systeemmappen, zoals grep. Dit betekent dat je gemakkelijk verborgen bestanden op je systeem kunt vinden.

Voorbeelden van het gebruik van ack:

  • Vind alle bestanden in de huidige map en zijn submappen die het woord "test" bevatten : ack "test"
  • Hetzelfde, maar dan bestanden met de extensie .bak uitsluiten : ack "test" --ignore-file=match:/.bak$/
  • Zoek alle bestanden in de huidige map die de string "hello" bevatten en voer de eerste 2 regels van elk bestand uit: ack "hello" --heading --max-count=2

ripgrep

De tweede interessante tool is ripgrep. Het lijkt in veel opzichten op ack, maar gebruikt een sneller zoekalgoritme, waardoor het vooral handig is voor grote projecten.

Hier zijn enkele voorbeelden:

  1. Zoek alle bestanden in de huidige map en de submappen die het woord "test" bevatten : rg "test"
  2. Hetzelfde, maar met uitsluiting van bestanden met de extensie .bak: rg "test" --glob "!*.bak"
  3. Zoek alle bestanden in de huidige map die de string "hello" bevatten en voer de eerste 2 regels van elk bestand uit: rg "hello" --heading --max-columns=2

Aan het einde is het de moeite waard om fzf te noemen. Het is niet alleen een stringzoeker zoals ack en ripgrep. Fzf wordt gebruikt als een hulpprogramma om bestanden, mappen en items in een lijst te vinden. Verder werkt het vergelijkbaar met ack/ripgrep, maar met de toegevoegde mogelijkheid om de resultaten live te filteren. Hier zijn enkele voorbeelden:

  • Zoek naar bestanden die beginnen met de letter F op je computer: locate F | fzf -m
  • Verlaat de huidige map en ga naar de map die ik wil: cd **<TAB> | fzf
  • Selecteer de SVN revisie en kopieer het nummer naar het klembord: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Hopelijk helpen deze tools je om snel en efficiënt de bestanden en strings te vinden die je nodig hebt. Welke je ook kiest, ze bieden allemaal geavanceerde zoekfuncties die je werk aanzienlijk kunnen versnellen.