grep

Använda grep (och egrep) med Regular Expressions

Använda grep (och egrep) med Regular Expressions
Denna handledning beskriver hur man använder båda grep (och egrep) to hitta text i filer, i sin enkla form och i kombination med reguljära uttryck. Den innehåller flera exempel och övningar, plus lösningar, för tittaren att slutföra.

Namnet grep kommer från ed (och vim) -kommandot “g / re / p”, vilket betyder att globalt söka efter ett visst reguljärt uttryck och skriva ut (visa) utdata.

Regelbunden Uttryck

Verktygen tillåter användaren att söka i textfiler efter rader som matchar ett vanligt uttryck (regexp). Ett reguljärt uttryck är en söksträng som består av text och en eller flera av 11 specialtecken. Ett enkelt exempel är att matcha början på en rad.

Exempel på fil

Den grundläggande formen av grep kan användas för att hitta enkel text i en viss fil eller filer. För att prova exemplen skapar du först exempelfilen.

Använd en redigerare som nano eller vim för att kopiera texten nedan till en fil som heter min fil.

xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Även om du kan kopiera och klistra in exemplen i texten (observera att dubbla citat kanske inte kopieras ordentligt) måste kommandon skrivas för att lära sig dem ordentligt.

Innan du provar exemplen, se exempelfilen:

$ cat myfile

Enkel sökning

För att hitta texten 'xyz' i filen kör du följande:

$ grep xyz myfile

Använda färger

För att visa färger, använd -color (ett dubbel bindestreck) eller skapa helt enkelt ett alias. Till exempel:

$ grep --color xyz myfile

eller

$ alias grep = 'grep - färg'
$ grep xyz myfile

alternativ

Vanliga alternativ som används med grep kommandot inkluderar:

Till exempel:

$ grep -i xyz myfile # hitta text oavsett fall
$ grep -ic xyz myfile # räknar rader med text
$ grep -in xyz myfile # visa radnummer

Skapa flera filer

Innan du försöker söka i flera filer, skapa först flera nya filer:

$ echo xyz> myfile1
$ echo -e “xyz \ nxzz \ nXYZ”> myfil2
$ echo -e “xxx \ nyyy”> minfil3
$ cat myfile1
$ cat myfile2
$ cat myfile3

Sök i flera filer

För att söka i flera filer med filnamn eller ett jokertecken anger du:

$ grep -ic xyz myfile myfile1 myfile2 myfile3
$ grep -in xyz my * 
# matchningsfilnamn som börjar med "min"

Övning I

  1. Räkna först hur många rader det finns i filen / etc / passwd.
Tips: använd wc -l / etc / passwd
  1. Hitta nu alla förekomster av texten var i filen / etc / passwd.
  2. Hitta hur många rader i filen som innehåller texten
  3. Hitta hur många rader som INTE innehåller texten var.
  4. Hitta posten för din inloggning i / etc / passwd

Träningslösningar finns i slutet av den här artikeln.

Använda reguljära uttryck

Kommandot grep kan också användas med reguljära uttryck genom att använda en eller flera av elva specialtecken eller symboler för att förfina sökningen. Ett reguljärt uttryck är en teckensträng som innehåller specialtecken för att möjliggöra mönstermatchning i verktyg som grep, vim och sed. Observera att strängarna kan behöva bifogas i citat.

Tillgängliga specialtecken inkluderar:

^ Början på en rad
$ Slut på en rad
. Alla tecken (utom \ n ny rad)
* 0 eller fler av tidigare uttryck
\ Före en symbol gör det till en bokstavlig karaktär

Observera att *, som kan användas på kommandoraden för att matcha valfritt antal tecken inklusive inget, är inte används på samma sätt här.

Notera också användningen av citat i följande exempel.

Exempel

För att hitta alla rader som börjar med text med ^ -tecknet:

$ grep '^ xyz' myfil

Så här hittar du alla rader som slutar med text med $ -tecknet:

$ grep 'xyz $' myfile

Så här hittar du rader som innehåller en sträng med både ^ och $ tecken:

$ grep '^ xyz $' myfile

För att hitta linjer med hjälp av . för att matcha alla karaktärer:

$ grep '^ x.z 'myfile

För att hitta rader med * för att matcha 0 eller fler av föregående uttryck:

$ grep '^ xy * z' myfile

För att hitta linjer med .* för att matcha 0 eller fler av vilket tecken som helst:

$ grep '^ x.* z 'myfile

För att hitta linjer med hjälp av \ för att undkomma * karaktären:

$ grep '^ x \ * z' minfil

För att hitta \ karaktären använd:

$ grep '\\' myfile

Uttryck grep - egrep

De grep kommandot stöder endast en delmängd av de tillgängliga reguljära uttrycken. Men kommandot egrep:

Observera att uttrycken måste vara inneslutna i ett par citat.

För att använda färger, använd -color eller skapa igen ett alias:

$ alias egrep = 'egrep --color'

För att söka efter mer än en regex de egrep kommandot kan skrivas över flera rader. Detta kan dock också göras med följande specialtecken:

| Alternativ, antingen den ena eller den andra
(…) Logisk gruppering av en del av ett uttryck
$ egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Detta extraherar raderna som börjar med root, uucp eller e-post från filen, | symbol som betyder något av alternativen.

Följande kommando kommer inte fungerar, även om inget meddelande visas, eftersom grundläggande grep kommandot stöder inte alla reguljära uttryck:

$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Men på de flesta Linux-system är kommandot grep -E är samma som att använda egrep:

$ grep -E '(^ ​​root | ^ uucp | ^ mail)' / etc / passwd

Använda filter

Rör är processen för att skicka utdata från ett kommando som inmatning till ett annat kommando och är ett av de mest kraftfulla Linux-verktygen som finns.

Kommandon som visas i en pipeline kallas ofta filter eftersom de i många fall siktar igenom eller ändrar ingången som skickas till dem innan de skickar den modifierade strömmen till standardutdata.

I följande exempel, standardutdata från ls -l överförs som standardingång till grep kommando. Produktion från grep kommandot skickas sedan som inmatning till Mer kommando.

Detta visar endast kataloger i /etc:

$ ls -l / etc | grep '^ d' | mer

Följande kommandon är exempel på användning av filter:

$ ps -ef | grep cron

$ vem | grep kdm

Exempel på fil

För att prova granskningsövningen, skapa först följande exempelfil.

Använd en redigerare som nano eller vim för att kopiera texten nedan till en fil som heter människor:

Personlig J.Smith 25000
Personlig E.Smith 25400
Utbildning A.Brun 27500
Utbildning C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Personlig F.Jones 25000
utbildning * C.Evans 25500
Goodsout W.Påven 30400
Bottenvåning T.Smythe 30500
Personlig J.Maler 33000

Övning II

  1. Visa filen människor och undersöka dess innehåll.
  2. Hitta alla rader som innehåller strängen Smed i filen människor.Tips: använd kommandot grep men kom ihåg att det som standard är skiftlägeskänsligt.
  3. Skapa en ny fil, npeople, som innehåller alla rader som börjar med strängen Personlig i folkomtalet.Tips: använd kommandot grep med>.
  4. Bekräfta innehållet i filen npeople genom att lista filen.
  5. Lägg nu till alla rader där texten slutar med strängen 500 i filen människor till filen npeople.Tips: använd kommandot grep med >>.
  6. Bekräfta igen innehållet i filen npeople genom att lista filen.
  7. Hitta IP-adressen till servern som är lagrad i filen / etc / värdar.Tips: använd kommandot grep med $ (värdnamn)
  8. Använda sig av egrep att extrahera från / etc / passwd filkonto rader som innehåller lp eller din egen användar ID.

Träningslösningar finns i slutet av den här artikeln.

Fler reguljära uttryck

Ett vanligt uttryck kan ses som jokertecken på steroider.

Det finns elva tecken med speciella betydelser: de inledande och stängande hakparenteserna [], backslash \, markören ^, dollartecknet $, perioden eller punkten ., den vertikala stapeln eller rörsymbolen |, frågetecknet ?, asterisken eller stjärnan *, plustecknet + och öppnings- och stängningsrundfästet . Dessa specialtecken kallas också ofta metatecken.

Här är hela uppsättningen specialtecken:

^ Början på en rad
$ Slut på en rad
. Alla tecken (utom \ n ny rad)
* 0 eller fler av tidigare uttryck
| Alternativ, antingen den ena eller den andra
[…] Explicit uppsättning tecken att matcha
+ 1 eller fler av tidigare uttryck
? 0 eller 1 i föregående uttryck
\ Före en symbol gör det till en bokstavlig karaktär
... Explicit kvantifieringsnotation
(…) Logisk gruppering av en del av ett uttryck

Standardversionen av grep har endast begränsat stöd för regelbundet uttryck. För att alla följande exempel ska fungera, använd egrep istället eller grep -E.

För att hitta linjer med hjälp av | för att matcha något av uttrycken:

$ egrep 'xxz | xzz' minfil

För att hitta linjer med | för att matcha något av uttrycken i en sträng använd också ():

$ egrep '^ x (Yz | yz)' minfil

Så här hittar du rader med [] för att matcha vilket tecken som helst:

$ egrep '^ x [Yy] z' myfile

Så här hittar du rader som använder [] för att INTE matcha något tecken:

$ egrep '^ x [^ Yy] z' myfile

För att hitta rader med * för att matcha 0 eller fler av föregående uttryck:

$ egrep '^ xy * z' minfil

För att hitta rader med + för att matcha 1 eller fler av föregående uttryck:

$ egrep '^ xy + z' minfil

För att hitta linjer med hjälp av ? för att matcha 0 eller 1 i föregående uttryck:

$ egrep '^ xy?z 'myfile

Övning III

  1. Hitta alla rader som innehåller namnen Evans eller Maler i filen människor.
  2. Hitta alla rader som innehåller namnen Smith, Smyth eller Smythe i filen människor.
  3. Hitta alla rader som innehåller namnen Brun, Browen eller Bron i filen människor.Om du har tid:
  4. Hitta raden som innehåller strängen (administration), inklusive parenteser, i filen personer.
  5. Hitta raden som innehåller tecknet * i filen personer.
  6. Kombinera 5 och 6 ovan för att hitta båda uttrycken.

Fler exempel

För att hitta linjer med . och * för att matcha alla teckenuppsättningar:

$ egrep '^ xy.* z 'myfile

Så här hittar du rader med för att matcha N antal tecken:

$ egrep '^ xy 3 z' minfil
$ egrep '^ xy 4 z' minfil

Så här hittar du rader med för att matcha N eller flera gånger:

$ egrep '^ xy 3, z' myfile

Så här hittar du rader som använder för att matcha N gånger men inte mer än M gånger:

$ egrep '^ xy 2,3 z' myfile

Slutsats

I denna handledning tittade vi först på att använda grep i sin enkla form för att hitta text i en fil eller i flera filer. Vi kombinerade sedan texten som ska sökas med enkla reguljära uttryck och sedan mer komplexa med egrep.

Nästa steg

Jag hoppas att du kommer att utnyttja den kunskap som erhållits här. Prova grep kommandon på dina egna data och kom ihåg, reguljära uttryck som beskrivs här kan användas i samma form i vi, sed och awk!

Träningslösningar

Övning I

Räkna först hur många rader det finns i filen / etc / passwd.
$ wc -l / etc / passwd
Hitta nu alla förekomster av texten var i filen / etc / passwd.
$ grep var / etc / passwd
Hitta hur många rader i filen som innehåller texten var

grep -c var / etc / passwd

Hitta hur många rader som INTE innehåller texten var.

grep -cv var / etc / passwd

Hitta posten för din inloggning i / etc / passwd fil
grep kdm / etc / passwd

Övning II

Visa filen människor och undersöka dess innehåll.
$ kattfolk
Hitta alla rader som innehåller strängen Smed i filen människor.
$ grep-folk från Smith
Skapa en ny fil, människor, som innehåller alla rader som börjar med strängen Personlig i människor fil
$ grep '^ Personliga' människor> människor
Bekräfta innehållet i filen människor genom att lista filen.
$ kattpersoner
Lägg nu till alla rader där texten slutar med strängen 500 i filen människor till filen människor.
$ grep '500 $' människor >> människor
Bekräfta igen innehållet i filen människor genom att lista filen.
$ kattpersoner
Hitta IP-adressen till servern som är lagrad i filen / etc / värdar.
$ grep $ (värdnamn) / etc / värdar
Använda sig av egrep att extrahera från / etc / passwd filkonto rader som innehåller lp eller ditt eget användar-id.
$ egrep '(lp | kdm :)' / etc / passwd

Övning III

Hitta alla rader som innehåller namnen Evans eller Maler i filen människor.
$ egrep 'Evans | Maler' -folk
Hitta alla rader som innehåller namnen Smed, Smyth eller Smythe i filen människor.
$ egrep 'Sm (i | y)?' människor
Hitta alla rader som innehåller namnen Brun, Browen eller Bron i filen människor.
$ egrep 'Brow?e?n 'människor
Hitta raden som innehåller strängen (administration), inklusive parenteser i filen människor.

$ egrep '\ (Admin \)' personer

Hitta raden som innehåller karaktären * i filen människor.
$ egrep '\ *' personer
Kombinera 5 och 6 ovan för att hitta båda uttrycken.

$ egrep '\ (Admin \) | \ *' personer


Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...