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.