Pipes, Grep, Sort Commands: Linux Tutorial 9
Indholdsfortegnelse:
- Grep Command Syntax
- Sådan bruges
grep
til at søge efter en streng i filer - Inverter kamp (ekskluder)
- Sådan bruges Grep til at søge efter en streng i kommandoutput
- Rekursiv søgning
- Vis kun filnavnet
- Tilfældig følsom søgning
- Søg efter fulde ord
- Vis linienumre
- Tællekampe
- Søg efter flere strenge (mønstre)
- Stille tilstand
- Grundlæggende regelmæssig ekspression
- Udvidede regelmæssige udtryk
- Udskriv linjer før en kamp
- Udskriv linjer efter en kamp
- Konklusion
grep
kommandoen, der står for “global regulær ekspressionsprint”, er en af de mest kraftfulde og mest anvendte kommandoer i Linux.
Grep søger efter en eller flere inputfiler efter linjer, der matcher et givet mønster og skriver hver matchende linje til standardoutput. Hvis der ikke er angivet nogen filer, læses
grep
fra standardindgangen, som normalt er output fra en anden kommando.
I denne tutorial vil vi vise dig, hvordan du bruger
grep
kommandoen gennem praktiske eksempler og detaljerede forklaringer på de mest almindelige GNU-
grep
indstillinger.
Grep Command Syntax
Før vi går ind på, hvordan du bruger
grep
kommandoen, lad os starte med at gennemgå den grundlæggende syntaks.
grep
værktøjsudtrykket har følgende form:
grep PATTERN
Elementerne i firkantede parenteser er valgfri.
-
OPTIONS
- Nul eller flere indstillinger. Grep giver et antal indstillinger, der kontrollerer dens opførsel.PATTERN
- Søgemønster.FILE
- Nul eller flere inputfilnavne.
For at kunne søge i filen skal brugeren, der kører kommandoen, have læseadgang til filen.
Sådan bruges
grep
til at søge efter en streng i filer
Den mest basale brug af
grep
kommandoen er at søge efter en streng (tekst) i en fil.
For eksempel at vise linjerne fra filen
/etc/passwd
, der indeholder strengbasen, kan du bruge følgende kommando:
grep bash /etc/passwd
Outputet skal se sådan ud:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Hvis strengen indeholder mellemrum, skal du vedlægge den i enkelt eller dobbelt anførselstegn:
grep "Gnome Display Manager" /etc/passwd
Inverter kamp (ekskluder)
For at få vist linjer, der ikke matcher et mønster, skal du bruge indstillingen
-v
(eller -
--invert-match
).
For eksempel for at vise linierne fra filen
/etc/passwd
, der ikke indeholder strengen
nologin
, kan du bruge 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
Sådan bruges Grep til at søge efter en streng i kommandoutput
I stedet for at specificere inputfiler, kan du rør output fra en anden kommando til
grep
og derefter kun vise linjer, der matcher et givet mønster.
For at finde ud af, hvilke processer der kører på dit system som bruger-
www-data
, kan du f.eks. Bruge 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å kæde flere rør ind på kommandoen. Som du kan se i output ovenfor er der også en linje, der indeholder
grep
processen. Hvis du ikke ønsker, at den linje skal vises, skal du sende output til en anden
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
Rekursiv søgning
Hvis du vil rekursivt søge efter et mønster, skal du bruge indstillingen
-r
(eller -
--recursive
). Dette vil søge gennem alle filer i det angivne bibliotek og springe over de symlinks, der findes rekursivt. For at følge alle symboliske links skal du bruge indstillingen
-R
(eller -
--dereference-recursive
).
I det følgende eksempel søger vi efter strengen
linuxize.com
i alle filer i
/etc
biblioteket:
grep -r linuxize.com /etc
Kommandoen udskriver de matchende linjer, der er præfixeret af den fulde sti 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
bruger du
-R
option, vil
grep
følge alle symboliske links:
grep -R linuxize.com /etc
Bemærk den sidste linje i output. Denne linje udskrives ikke i eksemplet ovenfor, fordi filer i Nginx 's
sites-enabled
bibliotek er symlinks til konfigurationsfiler i det
sites-available
bibliotek.
/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 kun filnavnet
For at undertrykke standard
grep
output og kun udskrive navnene på filer, der indeholder det matchede mønster, kan du bruge indstillingen
-l
(eller
--files-with-matches
).
For eksempel at søge gennem alle filer, der slutter med
.conf
i det aktuelle arbejdsmappe og kun udskrive navnene på filer, der indeholder strengen
linuxize.com
type:
grep -l linuxize.com *.conf
Outputet ser sådan ud:
tmux.conf haproxy.conf
Indstillingen
-l
bruges normalt i kombination med den rekursive mulighed
-R
:
Tilfældig følsom søgning
Som standard er
grep
kommandoen store og små bogstaver. Dette betyder, at store og små bogstaver behandles som adskilte.
For at ignorere sag, når du søger, skal du bruge indstillingen
-i
(eller
--ignore-case
).
For eksempel, når du søger efter
Zebra
uden nogen mulighed, viser følgende kommando ikke nogen output, dvs. der er matchende linjer:
grep Zebra /usr/share/words
Men hvis du udfører en retssansfølsom søgning ved hjælp af indstillingen
-i
, matcher den både store og små bogstaver:
grep -i Zebra /usr/share/words
Specificering af "Zebra" vil matche "zebra", "ZEbrA" eller enhver anden kombination af store og små bogstaver for den streng.
Søg efter fulde ord
Når du søger efter "gnu", udskriver
grep
også linjerne, hvor "gnu" er indlejret i større ord, såsom "cygnus" eller "magnum".
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Hvis du kun vil returnere de linjer, hvor den specificerede streng er et helt ord (lukket af tegn, der ikke er ord), skal du bruge indstillingen
-w
(eller
--word-regexp
).
az
,
AZ
og
0-9
) og understregninger (
_
). Alle andre tegn betragtes som ikke-ordtegn.
grep -w gnu /usr/share/words
Vis linienumre
For at vise antallet af linjer, der indeholder en streng, der matcher et mønster, skal du bruge indstillingen
-n
(eller -
--line-number
). Når du bruger denne indstilling, udskriver
grep
kampe til standardudgang, der er præfikseret med det linjenummer, det blev fundet på.
For eksempel for at få vist linjerne fra filen
/etc/services
, der indeholder strengbash, der er præfixeret med det matchende linjenummer, kan du bruge følgende kommando:
grep -n 10000 /etc/services
Outputet nedenfor viser os, at kampene findes på linjerne 10423 og 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Tællekampe
Hvis du vil udskrive et antal matchende linjer til standardoutput, skal du bruge indstillingen
-c
(eller -
--count
).
I eksemplet nedenfor tæller vi antallet af konti, der har
/usr/bin/zsh
som et shell.
grep -c '/usr/bin/zsh' /etc/passwd
Søg efter flere strenge (mønstre)
To eller flere søgemønstre kan forbindes ved hjælp af OR-operatøren
|
.
Som standard fortolker
grep
mønsteret som et grundlæggende regulært udtryk, hvor metategnene som
|
mister deres specielle betydning, og deres tilbagestående versioner skal bruges.
I eksemplet nedenfor søger vi efter alle forekomster af ordene
fatal
,
error
og
critical
i Nginx-logfejlfilen:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Stille tilstand
Den
-q
(eller -
--quiet
) fortæller
grep
at ikke skrive noget til terminalen (standardoutput). Hvis der findes en kamp, afsluttes kommandoen med status
0
. Dette er nyttigt, når du bruger
grep
i shell-scripts, hvor du vil kontrollere, om en fil indeholder en streng og udføre en bestemt handling afhængigt af resultatet.
Her er et eksempel på at bruge
grep
i en stille tilstand som en testkommando i en
if
sætning:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Grundlæggende regelmæssig ekspression
GNU Grep har to regulære ekspressionsfunktionssæt, Basic og Extended. Som standard fortolker
grep
mønsteret som et grundlæggende regulært udtryk.
Når de bruges i grundlæggende regulært udtrykstilstand, er alle andre tegn undtagen metategnene faktisk regulære udtryk, der matcher sig selv. Nedenfor er en liste over mest almindeligt anvendte metategn:
-
Brug symbolet
^
(caret) til at matche udtryk i starten af en linje. I det følgende eksempel stemmer strengen^kangaroo
kun, hvis den forekommer i starten af en linje.grep "^kangaroo" file.txt
Brug symbolet
$
(dollar) til at matche udtryk i slutningen af en linje. I det følgende eksempel stemmer strengstrengenkangaroo$
kun, hvis den forekommer helt i slutningen af en linje.grep "kangaroo$" file.txt
Brug
.
(periode) symbol, der matcher ethvert enkelt tegn. For at matche alt, der begynder medkan
så har to tegn og slutter medroo
, kan du bruge følgende mønster:grep "kan..roo" file.txt
Brug
accept
eller “accent
, du kan bruge følgende mønster:grep "accet" file.txt
Brug
co(any_letter_except_l)a
, såsomcoca
,cobalt
og så videre, men vil ikke matche linjerne, der indeholdercola
,grep "coa" file.txt
For at undslippe den specielle betydning af det næste tegn, skal du bruge symbolet
\
(skråstreg).
Udvidede regelmæssige udtryk
For at fortolke mønsteret som et udvidet regulært udtryk skal du bruge indstillingen
-E
(eller -
--extended-regexp
). Udvidede regulære udtryk inkluderer alle de grundlæggende metategn sammen med yderligere metategn for at skabe mere komplekse og kraftfulde søgemønstre. Nedenfor er nogle eksempler:
-
Match og udpak alle e-mail-adresser fra en given fil:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Match og udpak alle gyldige IP-adresser fra en given fil:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Indstillingen
-o
bruges til kun at udskrive den matchende streng.
Udskriv linjer før en kamp
Hvis du vil udskrive et specifikt antal linjer før matchende linjer, skal du bruge indstillingen
-B
(eller -
--before-context
).
For eksempel at vise fem linjer med førende kontekst før matchende linjer, bruger du følgende kommando:
Udskriv linjer efter en kamp
Hvis du vil udskrive et specifikt antal linjer efter matchende linjer, skal du bruge indstillingen
-A
(eller
--after-context
).
For eksempel for at få vist fem linjer med efterfølgende kontekst efter matchende linjer, ville du bruge følgende kommando:
Konklusion
grep
kommandoen giver dig mulighed for at søge efter et mønster inde i filer. Hvis en match findes, udskriver grep linjerne, der indeholder det specificerede mønster.
Der er meget mere at lære om Grep på siden Grep Brugermanual.
grep terminalNogle gange kan kopiering eller flytning af filer være meget irriterende. Et af de mest almindelige problemer, mens du arbejder på computeren, er den langsommere kopiering eller flytning af filer, især når du overfører store filer. Hvis du regelmæssigt overfører en stor mængde filer og ønsker at fremskynde hastigheden til at kopiere eller flytte filer, er

File Fisher
Find og erstat tekst i flere filer i bulk på Windows

Find og erstat værktøj hjælper dig med at finde og erstatte tekst i flere filer i bulk. Du skal blot indtaste teksten og trykke på Erstat for at erstatte tekst med det samme.
Uønskede filer er filer, der forbliver på din computer, efter at en opgave er udført. Nogle gange skal Windows eller noget program oprette midlertidige filer, mens du laver nogle opgaver, og glemmer derefter at slette de midlertidige filer, den oprettede. Som tiden går, er din computer fuld af uønskede filer i form af midlertidige filer, logfiler, downloadede filer og uønskede / unødvendige registreringsdatabaser i Windows. Artiklen snakker om fjernelse af uønskede filer i Windows 10 ved hjælp a

Uønskede filer i Windows 10