12 Praktiske eksempler på Linux grep Command


Har du nogensinde været konfronteret med opgaven med at lede efter en bestemt streng eller et bestemt mønster i en fil, men har du endnu ingen anelse om, hvor du skal begynde at kigge? Nå, så er her grep til undsætning!

grep er en kraftfuld søgemaskine til filmønstre, der er udstyret til enhver distribution af Linux. Hvis det af en eller anden grund ikke er installeret på dit system, kan du nemt installere det via din pakkehåndtering (apt-get på Debian/Ubuntu og yum på RHEL/CentOS/Fedora).

$ sudo apt-get install grep         #Debian/Ubuntu
$ sudo yum install grep             #RHEL/CentOS/Fedora

Jeg har fundet ud af, at den nemmeste måde at få dine fødder våde af grep er bare at dykke lige ind og bruge eksempler fra den virkelige verden.

1. Søg og find filer

Lad os sige, at du lige har installeret en ny kopi af den nye Ubuntu på din maskine, og at du vil give Python-scripting et skud. Du har gennemsøgt internettet på udkig efter vejledninger, men du ser, at der er to forskellige versioner af Python i brug, og du ved ikke, hvilken der blev installeret på dit system af Ubuntu-installationsprogrammet, eller om det installerede nogen moduler. Kør blot denne kommando:

# dpkg -l | grep -i python
ii  python2.7                        2.7.3-0ubuntu3.4                    Interactive high-level object-oriented language (version 2.7)
ii  python2.7-minimal                2.7.3-0ubuntu3.4                    Minimal subset of the Python language (version 2.7)
ii  python-openssl                   0.12-1ubuntu2.1                     Python wrapper around the OpenSSL library
ii  python-pam                       0.4.2-12.2ubuntu4                   A Python interface to the PAM library

Først kørte vi dpkg –l, som viser installerede * .deb-pakker på dit system. For det andet ledte vi output til grep –i python, som enkle stater “gå til grep og filtrer ud og returner alt med‘ python ’i.” Muligheden –i er der for at ignorere store og små bogstaver, da grep er store og små bogstaver. Brug af –i-indstillingen er en god vane at komme ind i, medmindre du selvfølgelig prøver at sømme ned en mere specifik søgning.

2. Søg og filtrer filer

Grep kan også bruges til at søge og filtrere i individuelle filer eller flere filer. Lad os tage dette scenarie:

Du har nogle problemer med din Apache-webserver, og du har nået ud til et af de mange fantastiske fora på nettet og beder om hjælp. Den venlige sjæl, der svarer dig, har bedt dig om at sende indholdet af din/etc/apache2/sites-available/default-ssl-fil. Ville det ikke være lettere for dig, den fyr, der hjalp dig, og alle, der læste det, hvis du kunne fjerne alle de kommenterede linjer? Det kan du godt! Kør bare dette:

# grep –v “#”  /etc/apache2/sites-available/default-ssl

Indstillingen –v fortæller grep at invertere sin output, hvilket betyder at i stedet for at udskrive matchende linjer skal du gøre det modsatte og udskrive alle de linjer, der ikke matcher udtrykket, i dette tilfælde de # kommenterede linjer.

3. Find kun alle .mp3-filer

Grep kan være meget nyttigt til filtrering fra stdout. Lad os for eksempel sige, at du har en hel mappe fuld af musikfiler i en række forskellige formater. Du vil finde alle * .mp3-filerne fra kunstneren JayZ, men du vil ikke have nogen af de remixede spor. Brug af en find-kommando med et par grep-rør gør tricket:

# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”

I dette eksempel bruger vi find til at udskrive alle filerne med en * .mp3-udvidelse, rør den til grep –i for at filtrere ud og udskriver alle filer med navnet “JayZ” og derefter et andet rør til grep –vi hvilke filtre ud og udskriver ikke alle filnavne med strengen (under alle omstændigheder) "remix".

4. Vis antal linjer før eller efter søgestreng

Et andet par valgmuligheder er –A- og –B-switchene, der viser den matchede linje og antallet af linjer, der enten kommer før eller efter søgestrengen. Mens mandsiden giver en mere detaljeret forklaring, finder jeg det nemmest at huske mulighederne som –A = efter og –B = før:

# ifconfig | grep –A 4 eth0
# ifconfig | grep  -B 2 UP

5. Udskriver antal linjer omkring match

Greps valgmulighed –C er ens, men i stedet for at udskrive de linjer, der kommer enten før eller efter strengen, udskriver den linjerne i begge retninger:

# ifconfig | grep –C 2 lo

6. Tæl antal kampe

Svarende til piping af en grep-streng til antal ord (wc-program) kan greps indbyggede mulighed udføre det samme for dig:

# ifconfig | grep –c inet6

7. Søg efter filer efter given streng

Indstillingen –n til grep er meget nyttig ved fejlfinding af filer under kompileringsfejl. Det viser linjenummeret i filen for den givne søgestreng:

# grep –n “main” setup..py

8. Søg i en streng Rekursivt i alle mapper

Hvis du vil søge efter en streng i den aktuelle mappe sammen med alle underkataloger, kan du angive –r-indstillingen for at søge rekursivt:

# grep –r “function” *

9. Søger efter hele mønsteret

At videregive –w-indstillingen til grep søger efter hele mønsteret i strengen. For eksempel ved hjælp af:

# ifconfig | grep –w “RUNNING”

Vil udskrive linjen, der indeholder mønsteret i anførselstegn. På den anden side, hvis du prøver:

# ifconfig | grep –w “RUN”

Intet vil blive returneret, da vi ikke søger efter et mønster, men et helt ord.

10. Søg i en streng i Gzipped Files

Grep's derivater fortjener noget at nævne. Den første er zgrep, som i lighed med zcat er til brug på gzippede filer. Det tager de samme muligheder som grep og bruges på samme måde:

# zgrep –i error /var/log/syslog.2.gz

11. Match regelmæssig udtryk i filer

Egrep er et andet derivat, der står for "Extended Global Regular Expression". Det genkender yderligere udtryksmetakarakterer ved +? | og().

egrep er meget nyttigt til søgning i kildefiler og andre kodestykker, hvis behovet skulle opstå. Det kan påberåbes fra almindelig grep ved at angive –E-indstillingen.

# grep –E

12. Søg efter en fast mønsterstreng

Fgrep søger i en fil eller en liste over filer efter en fast mønsterstreng. Det er det samme som grep –F. En almindelig måde at bruge fgrep på er at sende en fil med mønstre til den:

# fgrep –f file_full_of_patterns.txt file_to_search.txt

Dette er bare et udgangspunkt med grep, men som du sandsynligvis kan se, er det uvurderligt til en række formål. Bortset fra de enkle en-linjekommandoer, vi har implementeret, kan grep bruges til at skrive kraftige cron-job og robuste shell-scripts til en start.

Vær kreativ, eksperimenter med mulighederne på mandsiden, og kom med grep-udtryk, der tjener dine egne formål!