När vi kör vissa kommandon i Unix/Linux för att läsa eller redigera text från en sträng eller fil, försöker vi oftast filtrera utdata till en viss sektion av intresse. Det är här det är praktiskt att använda reguljära uttryck.
Läs också:10 Användbara Linux -kedjeoperatörer med praktiska exempel
Ett reguljärt uttryck kan definieras som en sträng som representerar flera sekvenser av tecken. En av de viktigaste sakerna med reguljära uttryck är att de låter dig filtrera utdata från ett kommando eller en fil, redigera ett avsnitt i en text eller konfigurationsfil och så vidare.
Regelbundna uttryck består av:
(.)
det matchar alla enskilda tecken utom en ny rad.(*)
den matchar noll eller fler förekomster av den omedelbara karaktären som föregår den.[ tecken) ]
det matchar någon av de tecken som anges i tecken, kan man också använda en bindestreck
(-)
att betyda en rad tecken som t.ex. [a-f]
, [1-5]
, och så vidare.^
det matchar början på en rad i en fil.$
matchar slutet av raden i en fil.\
det är en flyktkaraktär.För att filtrera text måste man använda ett textfiltreringsverktyg som t.ex. ock. Du kan tänka dig ock som ett eget programmeringsspråk. Men för omfattningen av denna guide för att använda ock, ska vi täcka det som ett enkelt kommandoradsfiltreringsverktyg.
Den allmänna syntaxen för awk är:
# awk 'script' filnamn.
Var 'manus'
är en uppsättning kommandon som förstås av ock och körs på fil, filnamn.
Det fungerar genom att läsa en given rad i filen, gör en kopia av raden och kör sedan skriptet på raden. Detta upprepas på alla rader i filen.
De 'manus'
finns i formen '/ mönster/ handling'
var mönster är ett vanligt uttryck och handling är vad awk kommer att göra när den hittar det givna mönstret i en rad.
I följande exempel ska vi fokusera på de metatecken som vi diskuterade ovan under funktionerna i awk.
Exemplet nedan skriver ut alla rader i filen /etc/hosts eftersom inget mönster ges.
# awk '//{print} '/etc/hosts.
Jag exemplet nedan, ett mönster lokal värd
har getts, så awk kommer att matcha line having lokal värd i /etc/hosts
fil.
# awk '/localhost/{print} ' /etc /hosts
De (.)
kommer att matcha strängar som innehåller loc, lokal värd, localnet i exemplet nedan.
Det vill säga * l some_single_character c *.
# awk '/l.c/{print} ' /etc /hosts.
Det kommer att matcha strängar som innehåller lokal värd, localnet, rader, kapabel, som i exemplet nedan:
# awk '/l*c/{print} ' /etc /localhost.
Du kommer också att inse det (*)
försöker få dig den längsta möjliga matchningen den kan upptäcka.
Låt oss titta på ett fall som visar detta, ta det vanliga uttrycket t*t
vilket betyder matchsträngar som börjar med bokstav t
och avsluta med t
i raden nedan:
detta är tecmint, där du får de bästa bra självstudierna, hur man gör, guider, tecmint.
Du får följande möjligheter när du använder mönstret /t*t/
:
detta är t. detta är tecmint. detta är tecmint, där du får t. detta är tecmint, där du får det bästa bra t. detta är tecmint, där du får de bästa bra självstudierna, hur t. detta är tecmint, där du får de bästa bra självstudierna, hur du gör, guider, t. detta är tecmint, där du får de bästa bra självstudierna, hur du gör, guider, tecmint.
Och (*)
i /t*t/
jokertecken gör att awk kan välja det sista alternativet:
detta är tecmint, där du får de bästa bra självstudierna, hur man gör, guider, tecmint.
Ta till exempel uppsättningen [al1]
, här kommer awk att matcha alla strängar som innehåller karaktär a
eller l
eller 1
på en rad i filen /etc/hosts.
# awk '/[al1]/{print} ' /etc /hosts.
Nästa exempel matchar strängar som börjar med antingen K
eller k
följd av T
:
# awk '/[Kk]T/{print} ' /etc /hosts
Förstå tecken med awk:
[0-9]
betyder ett enda tal[a-z]
betyder matcha en enda liten bokstav[A-Ö]
betyder matcha en enda stor bokstav[a-zA-Z]
betyder matcha en enda bokstav[a-zA-Z 0-9]
betyder matcha en enda bokstav eller siffraLåt oss titta på ett exempel nedan:
# awk '/[0-9]/{print} ' /etc /hosts
Hela raden från filen /etc/hosts innehålla minst ett enda nummer [0-9]
i exemplet ovan.
Det matchar alla rader som börjar med mönstret som anges i exemplet nedan:
# awk '/^fe/{print} ' /etc /hosts. # awk '/^ff/{print} ' /etc /hosts.
Det matchar alla rader som slutar med det angivna mönstret:
# awk '/ab$/{print} ' /etc /hosts. # awk '/ost$/{print} ' /etc /hosts. # awk '/rs$/{print} ' /etc /hosts.
Det låter dig ta karaktären efter det som en bokstavlig, det vill säga överväga det precis som det är.
I exemplet nedan skriver det första kommandot ut alla rader i filen, det andra kommandot skriver ut ingenting eftersom jag vill matcha en rad som har $25.00, men ingen flyktkaraktär används.
Det tredje kommandot är korrekt eftersom ett Escape -tecken har använts för att läsa $ som det är.
# awk '//{print} 'deals.txt. # awk '/$25.00/{print} 'deals.txt. # awk '/\$25.00/{print} 'deals.txt.
Det är inte allt med ock kommandoradsfiltreringsverktyg, exemplen ovan och de grundläggande operationerna för awk. I de följande delarna kommer vi att gå vidare med hur man använder komplexa funktioner hos awk. Tack för att du läste igenom och för eventuella tillägg eller förtydliganden, lägg upp en kommentar i kommentarsfältet.