Betalingsmåter Abuse

Søke i filer etter innhold i Linux: ack og ripgrep

03.05.2023, 23:33

Hvis du bruker filsøk etter innhold i Linux, kan du redusere tiden og innsatsen betydelig når du søker etter spesifikk informasjon i store og komplekse filsystemer.

Hvorfor du trenger å søke etter filer etter innhold

Dette søket kan være spesielt nyttig når du vil finne filer som inneholder en bestemt streng eller et bestemt nøkkelord, eller når du vil finne alle filer som samsvarer med et bestemt mønster eller kriterium.

Søk etter filer etter innhold kan brukes til ulike oppgaver, for eksempel å finne

  • spesifikk tekst i store tekstfiler
  • konfigurasjonsfiler og skript som inneholder bestemte innstillinger eller kommandoer
  • filer som inneholder spesifikke data, for eksempel brukernavn eller telefonnumre
  • filer etter innholdstype, for eksempel å finne alle filer som inneholder JPEG-bilder eller PDF-dokumenter.

Det generelle formålet med å søke i filer etter innhold er å gjøre det enklere å arbeide med filsystemet og finne den informasjonen du trenger i filsystemet.

ack

La oss starte med ack-verktøyet. Det ble opprettet i 2005 som et alternativ til grep, og ble raskt populært blant utviklere.

Det har flere fordeler i forhold til grep, blant annet

  • smartere fil- og unntakssøk. Ack søker som standard bare i filer som kan være fornuftige, for eksempel ved å ekskludere .svn- eller .git-mapper. Og du kan legge til dine egne regler og unntak;
  • Ack søker som standard i skjulte filer og kataloger;
  • Ack prøver ikke å søke overalt, selv ikke i systemmapper, slik grep gjør. Dette betyr at du enkelt kan finne filer som er skjult på systemet ditt.

Eksempler på hvordan du bruker ack:

  • Finn alle filer i den aktuelle mappen og dens undermapper som inneholder ordet "test": ack "test"
  • Det samme, men ekskluderer filer med filtypen .bak: ack "test" --ignore-file=match:/.bak$/
  • Finn alle filer i den aktuelle mappen som inneholder strengen "hello", og skriv ut de to første linjene i hver fil: ack "hello" --heading --max-count=2

ripgrep

Det andre interessante verktøyet er ripgrep. Det ligner på ack på mange måter, men bruker en raskere søkealgoritme, noe som gjør det spesielt nyttig for store prosjekter.

Her er noen eksempler:

  1. Finn alle filer i den aktuelle mappen og dens undermapper som inneholder ordet "test": rg "test"
  2. Samme, men ekskluderer filer med filtypen .bak: rg "test" --glob "!*.bak"
  3. Finn alle filer i den aktuelle mappen som inneholder strengen "hello", og skriv ut de to første linjene i hver fil: rg "hello" --heading --max-columns=2

Til slutt er det verdt å nevne fzf. Det er ikke bare en strengfinner som ack og ripgrep. Fzf brukes som et verktøy for å finne filer, mapper og elementer i en liste. Ellers fungerer det på samme måte som ack/ripgrep, men med den ekstra muligheten til å filtrere resultatene direkte. Her er noen eksempler:

  • Søk etter filer som begynner med bokstaven F på datamaskinen din: locate F | fzf -m
  • Gå ut av den gjeldende mappen og gå til katalogen jeg ønsker: cd **<TAB> | fzf
  • Velg SVN-revisjonen og kopier nummeret til utklippstavlen: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Forhåpentligvis vil disse verktøyene hjelpe deg med å finne filene og strengene du trenger raskt og effektivt. Uansett hvilket verktøy du velger, tilbyr de alle avanserte søk som kan gjøre arbeidet ditt betydelig raskere.