6 bedste CLI-værktøjer til at søge almindelig tekstdata ved hjælp af regulære udtryk


Denne guide tager en rundtur i nogle af de bedste kommandolinjeværktøjer, der bruges til at søge matchende strenge eller mønstre i tekstfiler. Disse værktøjer bruges normalt sammen med regulære udtryk - forkortet som REGEX - som er unikke strenge til beskrivelse af et søgemønster.

Uden meget mere ado, lad os dykke ind.

1. Grep-kommando

Grep-værktøjet er først og fremmest - er et akronym for Global Regular Expression Print, er et kraftfuldt kommandolinjeværktøj, der er nyttigt, når du søger efter en bestemt streng eller et mønster i en fil.

Grep leveres med moderne Linux-distributioner som standard og giver dig fleksibiliteten til at returnere forskellige søgeresultater. Med grep kan du udføre en lang række funktioner såsom:

  • Søg efter strenge eller matchende mønstre i en fil.
  • Søg efter strenge eller matchende mønstre i Gzippede filer.
  • Tæl antallet af strengmatcher.
  • Udskriv de linjenumre, der indeholder strengen eller mønsteret.
  • Søg rekursivt efter strengen i mapper.
  • Udfør en omvendt søgning (dvs. vis resultater for strenge, der ikke matcher søgekriterierne).
  • Ignorer store og små bogstaver, når du søger efter strenge.

Syntaksen til brug af grep-kommandoen er ret enkel:

$ grep pattern FILE

Hvis du f.eks. Vil søge efter strengen 'Linux' i en fil, skal du sige hello.txt mens du ignorerer store og små bogstaver, skal du køre kommandoen:

$ grep -i Linux hello.txt

For at få flere muligheder, som du kan bruge med grep, skal du blot læse vores artikel om eksempler på mere avancerede eksempler på grep-kommandoer.

2. sed Kommando

Sed - forkortelse for Stream Editor - er et andet nyttigt kommandolinjeværktøj til manipulation af tekst i en tekstfil. Sed søger, filtrerer og erstatter strenge i en given fil på en ikke-interaktiv måde.

Som standard udskriver sed-kommandoen output til STDOUT (Standard Out), hvilket antyder, at resultatet af udførelsen udskrives på terminalen i stedet for at blive gemt i en fil.

Sed-kommando påberåbes som følger:

$ sed -OPTIONS command [ file to be edited ]

For eksempel, for at erstatte alle forekomster af 'Unix' med 'Linux', skal du påkalde kommandoen:

$ sed 's/Unix/Linux' hello.txt

Hvis du vil omdirigere output i stedet for at udskrive det på terminalen, skal du bruge omdirigeringstegnet (>) som vist.

$ sed 's/Unix/Linux' hello.txt > output.txt

Outputtet fra kommandoen gemmes i output.txt-filen i stedet for at blive udskrevet på skærmen.

For at tjekke flere muligheder, der kan bruges, skal du igen tjekke mandssiderne.

$ man sed

3. Ack-kommando

Ack er et hurtigt og bærbart kommandolinjeværktøj skrevet i Perl. Ack betragtes som en venlig erstatning for grep utility og output resulterer i en visuelt tiltalende måde.

Ack-kommandoen søger i filen eller biblioteket efter de linjer, der indeholder matchningen efter søgekriterierne. Derefter fremhæves den matchende streng i linjerne.
Ack har kapacitet til at skelne filer baseret på deres filtypenavne og til en vis grad indholdet i filerne.

Ack-kommandosyntaks:

$ ack [options] PATTERN [FILE...]
$ ack -f [options] [DIRECTORY...]

For eksempel for at kontrollere søgeudtrykket Linux skal du køre:

$ ack Linux hello.txt

Søgeværktøjet er ret intelligent, og hvis der ikke leveres nogen fil eller mappe af brugeren, søger det i det aktuelle bibliotek og underkataloger efter søgemønsteret.

I eksemplet nedenfor er der ikke leveret nogen fil eller mappe, men ack har automatisk registreret den tilgængelige fil og søgt efter det matchende mønster.

$ ack Linux

For at installere ack på dit system skal du køre kommandoen:

$ sudo apt install ack-grep    [On Debian/Ubuntu]
$ sudo dnf install ack-grep    [On CentOS/RHEL]

4. Awk-kommando

Awk er et fuldt udviklet script-sprog og også et værktøj til tekstbehandling og databehandling. Den søger i filer eller programmer, der indeholder søgemønsteret. Når strengen eller mønsteret findes, tager awk handling på kampen eller linjen og udskriver resultaterne på STDOUT.

AWK-mønsteret er lukket mellem krøllede seler, mens hele programmet er lukket i enkelt anførselstegn.

Lad os tage det enkleste eksempel. Lad os antage, at du udskriver datoen for dit system som vist:

$ date

Antag, at du kun vil udskrive den første værdi, som er ugedagen. I så fald rør udgangen til awk som vist:

$ date | awk '{print $1}'

For at vise efterfølgende værdier skal du adskille dem med et komma som vist:

$ date | awk '{print $1,$2}'

Kommandoen ovenfor viser ugedagen og månedsdatoen.

For at få flere muligheder, som du kan bruge med awk, skal du blot læse vores awk-kommandaserie.

5. Silver Searcher

Silver searcher er et værktøj på tværs af platforme og opensource-koder, der ligner ACK, men med vægt på hastighed. Det gør det nemt for dig at søge efter en bestemt streng inden for filer på kortest mulig tid:

Syntaks:

$ ag OPTIONS search_pattern /path/to/file

For eksempel at søge efter strengen 'Linux' i en fil hello.txt påkalde kommandoen:

$ ag Linux hello.txt

For yderligere muligheder, besøg man-siderne:

$ man ag

6. Ripgrep

Endelig har vi kommandolinjeværktøjet ripgrep. Ripgrep er et platformoverskridende værktøj til søgning efter regex-mønstre. Det er meget hurtigere end alle de tidligere nævnte søgeværktøjer og søger rekursivt i mapper efter matchende mønstre. Med hensyn til hastighed og ydeevne skiller intet andet værktøj sig ud som Ripgrep.

Som standard springer ripgrep over binære filer/skjulte filer og mapper. Vær også opmærksom på, at den som standard ikke søger efter filer, der ignoreres af .gitignore/.ignore/.rgignore-filer.

Ripgrep giver dig også mulighed for at søge efter bestemte filtyper. For eksempel for at begrænse din søgning til Javascript-filer, der køres:

$ rg -Tsj

Syntaksen til brug af ripgrep er ret let:

$ rg [OPTIONS] PATTERN [PATH...]

For eksempel. For at søge efter forekomster af strengen 'Linux' i filer, der er placeret i den aktuelle mappe, skal du køre kommandoen:

$ rg Linux

For at installere ripgrep på dit system skal du køre følgende kommandoer:

$ sudo apt install ripgrep      [On Debian/Ubuntu]
$ sudo pacman -S ripgrep        [On Arch Linux]
$ sudo zypper install ripgrep   [On OpenSuse]
$ sudo dnf install ripgrep      [On CentOS/RHEL/Fedora]

For yderligere muligheder, besøg man-siderne:

$ man rg

Dette er nogle af de mest anvendte kommandolinjeværktøjer til søgning, filtrering og manipulation af tekst i Linux. Hvis du har andre værktøjer, som du føler, vi har udeladt, så lad os det vide i kommentarsektionen.