Linux/Mac Terminal Tutorial: The Grep Command - Search Files and Directories for Patterns of Text
Innholdsfortegnelse:
- Grep Command Syntax
- Slik bruker du
grep
å søke etter en streng i filer - Inverter kamp (ekskluder)
- Hvordan bruke Grep til å søke etter en streng i kommandoutdata
- Rekursivt søk
- Vis bare filnavnet
- Utilpasset søk
- Søk etter fulle ord
- Vis linjenumre
- Telle kamper
- Søk etter flere strenger (mønstre)
- Stillemodus
- Grunnleggende uttrykk
- Utvidede vanlige uttrykk
- Skriv ut linjer før en kamp
- Skriv ut linjer etter en kamp
- Konklusjon
grep
kommandoen som står for “global regulary expression print” er en av de kraftigste og mest brukte kommandoene i Linux.
Grep søker i en eller flere inndatafiler etter linjer som samsvarer med et gitt mønster og skriver hver matchende linje til standardutdata. Hvis ingen filer er spesifisert, leser
grep
fra standardinngangen, som vanligvis er utdataene fra en annen kommando.
I denne opplæringen vil vi vise deg hvordan du bruker
grep
kommandoen gjennom praktiske eksempler og detaljerte forklaringer på de vanligste GNU
grep
alternativene.
Grep Command Syntax
Før vi går inn på hvordan du bruker
grep
kommandoen, la oss begynne med å gå gjennom den grunnleggende syntaks.
grep
har følgende form:
grep PATTERN
Elementene i firkantede parenteser er valgfrie.
-
OPTIONS
- Null eller flere alternativer. Grep gir en rekke alternativer som kontrollerer atferden.PATTERN
- Søkemønster.FILE
- Null eller flere inndatafiler.
For å kunne søke i filen, må brukeren som kjører kommandoen, ha lesetilgang til filen.
Slik bruker du
grep
å søke etter en streng i filer
Den mest grunnleggende bruken av
grep
kommandoen er å søke etter en streng (tekst) i en fil.
For å vise linjene fra
/etc/passwd
filen som inneholder strengen
bash
, kan du for eksempel bruke følgende kommando:
grep bash /etc/passwd
Utgangen skal se slik ut:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Hvis strengen inneholder mellomrom, må du legge den inn i enkelt eller dobbelt anførselstegn:
grep "Gnome Display Manager" /etc/passwd
Inverter kamp (ekskluder)
Hvis du vil vise linjene som ikke samsvarer med et mønster, bruker du alternativet
-v
(eller -
--invert-match
).
For å vise linjene fra
/etc/passwd
filen som ikke inneholder strengen
nologin
, kan du for eksempel bruke følgende kommando:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Hvordan bruke Grep til å søke etter en streng i kommandoutdata
I stedet for å spesifisere inndatafiler, kan du pipe utdataene fra en annen kommando til
grep
, og deretter bare vise linjer som samsvarer med et gitt mønster.
For å finne ut hvilke prosesser som kjøres på systemet ditt som bruker-
www-data
, kan du for eksempel bruke følgende
ps
kommando:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Du kan også lenke inn flere rør på kommandoen. Som du ser i utdataene over er det også en linje som inneholder
grep
prosessen. Hvis du ikke vil at linjen skal vises, passerer du utdataene til en annen
grep
forekomst som vist nedenfor.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Rekursivt søk
For å rekursivt søke etter et mønster, bruk alternativet
-r
(eller -
--recursive
). Dette vil søke gjennom alle filene i den angitte katalogen, og hoppe over symlinkene som oppstår rekursivt. For å følge alle symbolske lenker, bruk alternativet
-R
(eller -
--dereference-recursive
).
I det følgende eksemplet søker vi etter strengen
linuxize.com
i alle filer i
/etc
katalogen:
grep -r linuxize.com /etc
Kommandoen vil skrive ut de samsvarende linjene forhåndsinnstilt av hele banen til filen.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Hvis i stedet
-r
du bruker
-R
alternativet, vil
grep
følge alle symbolske lenker:
grep -R linuxize.com /etc
Legg merke til den siste linjen i utgangen. Denne linjen er ikke skrevet ut i eksemplet ovenfor fordi filer i Nginx 'kataloger som er
sites-enabled
for
sites-enabled
er symlinker til konfigurasjonsfiler i katalogen som er
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Vis bare filnavnet
For å undertrykke standard
grep
utdata og skrive ut bare navnene på filer som inneholder det matchede mønsteret, kan du bruke alternativet
-l
(eller
--files-with-matches
).
For eksempel å søke gjennom alle filer som slutter med
.conf
i den gjeldende arbeidskatalogen og bare skrive ut navnene på filer som inneholder strengen
linuxize.com
type:
grep -l linuxize.com *.conf
Utgangen vil se slik ut:
tmux.conf haproxy.conf
Alternativet
-l
brukes vanligvis i kombinasjon med det rekursive alternativet
-R
:
Utilpasset søk
Som standard er
grep
kommandoen store og små bokstaver. Dette betyr at store og små bokstaver blir behandlet som forskjellige.
For å ignorere sak når du søker, bruk alternativet
-i
(eller
--ignore-case
).
For eksempel, når du søker etter
Zebra
uten noe alternativ, vil følgende kommando ikke vise noen utdata, dvs. det er samsvarende linjer:
grep Zebra /usr/share/words
Men hvis du utfører et tilfelle ufølsomt søk ved å bruke alternativet
-i
, vil det samsvare med store og små bokstaver:
grep -i Zebra /usr/share/words
Å spesifisere “Zebra” vil samsvare med “zebra”, “ZEbrA” eller hvilken som helst annen kombinasjon av store og små bokstaver for den strengen.
Søk etter fulle ord
Når du søker etter “gnu”, vil
grep
også skrive ut linjene der “gnu” er innebygd i større ord, for eksempel “cygnus” eller “magnum”.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Hvis du bare vil returnere de linjene der den angitte strengen er et helt ord (lukket av ikke-
--word-regexp
), bruker du alternativet
-w
(eller
--word-regexp
).
az
,
AZ
og
0-9
) og understrekinger (
_
). Alle andre tegn regnes som ikke-ordtegn.
grep -w gnu /usr/share/words
Vis linjenumre
Hvis du vil vise antall linjer som inneholder en streng som samsvarer med et mønster, bruker du alternativet
-n
(eller -
--line-number
). Når du bruker dette alternativet, vil
grep
skrive ut fyrstikkene til standardutdata forhåndsinnstilt med linjenummeret den ble funnet på.
For å vise linjene fra filen
/etc/services
som inneholder strengen
bash
prefiks med det samsvarende linjenummeret, kan du for eksempel bruke følgende kommando:
grep -n 10000 /etc/services
Utgangen nedenfor viser oss at fyrstikkene er funnet på linjene 10423 og 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Telle kamper
Hvis du vil skrive ut et antall samsvarende linjer til standardutdata, bruker du alternativet
-c
(eller -
--count
).
I eksemplet nedenfor teller vi antall kontoer som har
/usr/bin/zsh
som et skall.
grep -c '/usr/bin/zsh' /etc/passwd
Søk etter flere strenger (mønstre)
To eller flere søkemønstre kan kobles sammen med OR-operatøren
|
.
Som standard tolker
grep
mønsteret som et grunnleggende vanlig uttrykk der metategnene som
|
mister sin spesielle mening, og deres tilbakeskrittede versjoner må brukes.
I eksemplet nedenfor søker vi etter alle forekomster av ordene
fatal
,
error
og
critical
i Nginx-loggfeilfilen:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Stillemodus
Den
-q
(eller -
--quiet
) forteller
grep
om ikke å skrive noe til terminalen (standardutgang). Hvis en kamp blir funnet, vil kommandoen avslutte med status
0
. Dette er nyttig når du bruker
grep
i skallskript der du vil sjekke om en fil inneholder en streng og utføre en viss handling avhengig av resultatet.
Her er et eksempel på å bruke
grep
i en stille modus som en testkommando i en
if
setning:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Grunnleggende uttrykk
GNU Grep har to vanlige uttrykksfunksjonssett, Basic og Extended. Som standard tolker
grep
mønsteret som et grunnleggende vanlig uttrykk.
Når de brukes i grunnleggende regulære uttrykksmodus, er alle andre tegn bortsett fra metategnene, vanlige uttrykk som matcher seg selv. Nedenfor er en liste over de mest brukte metategnene:
-
Bruk
^
(caret) -symbolet for å matche uttrykk i begynnelsen av en linje. I det følgende eksemplet vil strengen^kangaroo
samsvare bare hvis den forekommer helt på begynnelsen av en linje.grep "^kangaroo" file.txt
Bruk symbolet
$
(dollar) for å matche uttrykk på slutten av en linje. I det følgende eksemplet vil strengenkangaroo$
samsvare bare hvis den forekommer helt på slutten av en linje.grep "kangaroo$" file.txt
Bruk
.
(periode) symbol for å matche ethvert enkelt tegn. For å matche alt som begynner medkan
så har to tegn og slutter med streng-roo
, kan du bruke følgende mønster:grep "kan..roo" file.txt
Bruk
accept
eller "accent
, du kan bruke følgende mønster:grep "accet" file.txt
Bruk
co(any_letter_except_l)a
, for eksempelcoca
,cobalt
og så videre, men vil ikke samsvare med linjene som inneholdercola
,grep "coa" file.txt
For å unnslippe den spesielle betydningen av neste karakter, bruk symbolet
\
(skråstrek).
Utvidede vanlige uttrykk
Hvis du vil tolke mønsteret som et utvidet vanlig uttrykk, bruker du alternativet
-E
(eller
--extended-regexp
). Utvidede vanlige uttrykk inkluderer alle de grunnleggende metategnene, sammen med ekstra metategn for å lage mer komplekse og kraftige søkemønstre. Nedenfor er noen eksempler:
-
Match og trekk ut alle e-postadressene fra en gitt fil:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Match og trekk ut alle gyldige IP-adresser fra en gitt fil:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Alternativet
-o
brukes til å skrive ut bare den matchende strengen.
Skriv ut linjer før en kamp
Hvis du vil skrive ut et bestemt antall linjer før samsvarende linjer, bruker du alternativet
-B
(eller -
--before-context
).
For å vise fem linjer med kontekst før samsvarende linjer, bruker du for eksempel følgende kommando:
Skriv ut linjer etter en kamp
Hvis du vil skrive ut et bestemt antall linjer etter samsvarende linjer, bruker du alternativet
-A
(eller
--after-context
).
For å vise fem linjer med etterfølgende kontekst etter samsvarende linjer, bruker du følgende kommando:
Konklusjon
grep
kommandoen lar deg søke etter et mønster i filene. Hvis en kamp hvis funnet, vil grep skrive ut linjene som inneholder det spesifiserte mønsteret.
Det er mye mer å lære om Grep på siden Grep Brukerhåndbok.
grep terminalFinn og erstatt tekst i flere filer i bulk på Windows

Finn og erstatt verktøy hjelper deg med å finne og erstatte tekst i flere filer i bulk. Bare skriv inn teksten og klikk på Erstatt for å erstatte tekst umiddelbart.
Søppelfiler er filer som forblir på datamaskinen din etter at en oppgave er utført. Noen ganger trenger Windows eller noe program å opprette midlertidige filer mens du gjør noen oppgaver, og glemmer da å slette de midlertidige filene den opprettet. Etter hvert som tiden går, er datamaskinen full av søppelfiler i form av midlertidige filer, loggfiler, nedlastede filer og uønskede / unødvendige Windows-registeroppføringer. Artikkelen snakker om å fjerne søppelfiler i Windows 10 ved hjelp av Diskop

Uønskede filer i Windows 10
Anta at du har 100 .mp4-filer, 150 .mkv-filer, 200 .png-bilder og noen andre .txt- og .docx-filer i en mappe. Nå vil du organisere dem i henhold til filformatene. For eksempel vil du opprette en egen mappe for videoer, bilder og dokumenter. Hvis du vil sortere dem manuelt ved hjelp av filutvidelse og filtype, vil det være en tidkrevende oppgave hvis du har tusenvis av filer i en mappe. Du må velge dem før du flytter. Hvis du gjør en feil, vil filen ikke bli flyttet.

For å hjelpe deg med dette problemet, kan