Varje Linux Geek behöver veta Sed och Awk. Här är varför ...

Varje Linux Geek behöver veta Sed och Awk. Här är varför ... / Linux

Två av de mest brottsligt undervärderade Linux-verktygen är Sed och Awk. Även om de visserligen kan verka lite arka, om du någonsin måste göra repetitiva ändringar till stora bitar av kod eller text, eller om du någonsin måste analysera lite text är Sed och Awk ovärderliga.

Så, vad är de? Hur används de? Och hur, när de kombineras, gör de det enklare att bearbeta text?

Vad är sed?

Sed utvecklades 1971 på Bell Labs, av legendarisk datapionjär Lee E. McMahon.

Namnet står för stream editor, och det är precis vad det gör. Det låter dig redigera kroppar eller strömmar av text programma, genom ett kompakt och enkelt, men ändå Turing-komplett programmeringsspråk.

Sättet fungerar enkelt: det läser text, linje för rad i buffert. För varje rad utförs de fördefinierade instruktionerna, där det är tillämpligt.

Till exempel, om någon skulle skriva ett Sed-skript som ersatte ordet “öl” med “soda”, och passerade sedan i en textfil som innehöll hela texten till “99 flaskor öl på väggen”, det skulle gå igenom den filen på linjebasis och skriva ut “99 flaskor soda på väggen”, och så vidare.

Det mest grundläggande Sed-skriptet är en Hello World One. Här använder vi Unix Echo-verktyget, som bara matar ut strängar, för att skriva ut “Hej världen”. Men vi rör detta till Sed och berätta att det ska ersättas “Värld” med”Dave”. Självförklarande saker.

echo "Hello World" | sed s / world / Dave

Du kan också kombinera Sed-instruktioner i filer, om du behöver göra mer komplicerad redigering. Inspirerad av den här hilariska Reddit-tråden ska jag ta texterna till A-Ha Ta på mig, och ersätt varje förekomst av “jag”, “Mig”, och “Min”, med Greg.

Först lägger jag texterna till låten i en textfil som heter tom.txt. Då öppnar jag min föredragna textredigerare (min favorit är Vim Topp 7 skälen att ge Vim Text Editor en chans Topp 7 skäl att ge Vim Text Editor en chans I åratal har jag provat en textredigerare efter en annan. Du heter det, jag försökte det. Jag använde var och en av dessa redaktörer i över två månader som min primära dagliga redaktör. På något sätt ... Läs mer, men Nano nano vs vim: Terminal Text Editors Jämfört nano vs vim: Terminaltextredigerare Jämfört Medan Linux har blivit tillräckligt lätthet för praktiskt taget alla att använda utan att behöva använda Terminal, finns det några av oss som regelbundet använder det eller är nyfiken på hur man kan styra ... Läs mer och Gedit gedit: En av de mest funktionella, fyllda vanliga textredigerarna [Linux & Windows] gedit: En av de mest funktionella fyllda textredigerarna [Linux & Windows] När du tänker på vanliga textredigerare är det första som kan dyka upp i ditt huvud är Windows Notepad-applikation. Det gör exakt vad det är jobbbeskrivningsstatus - vanliga funktioner för en vanlig text ... Läs mer är båda bra val) och lägg till följande rader. Kontrollera att filen du skapar slutar med .sed.

Du kanske märker att i exemplet ovan har jag upprepat mig själv (t ex s / me / Greg / och s / Me / Greg /). Det beror på att vissa versioner av Sed, som den som levererar med Mac OS X, gör inte stödja otillräcklig matchning. Som ett resultat måste vi skriva två Sed-instruktioner för varje ord, så det erkänner den kapitaliserade och uncapitalized versionen.

Det här fungerar inte perfekt, som om du har ersatt varje förekomst av “jag”, “Mig”, och “Min” för hand. Kom ihåg att vi bara använder det som en övning för att visa hur du kan gruppera Sed-instruktioner i ett skript och sedan utföra dem med ett enda kommando.

Då måste vi anropa filen. För att göra det kör vi det här kommandot.

katt tom.txt | sed-f greg.sed

Låt oss sakta ner och titta på vad det här gör. Eagle-eyed läsare kommer att ha märkt det vi är inte använder echo här. Vi använder Cat. Det beror på att när Cat kommer att skriva ut hela innehållet i filen, kommer echo endast skriva ut filnamnet. Du har också märkt att vi kör Sed med “-f” flagga. Detta berättar att man öppnar manuset som en fil.

Slutresultatet är detta.

Det är också värt att notera att Sed stöder reguljära uttryck (REGEX). Dessa låter dig definiera mönster i text, med en speciell och komplicerad syntax.

Här är ett exempel på hur det kan fungera. Vi ska ta ovanstående sångtext, men använd regex för att skriva ut varje rad som inte börja med “Ta”.

katt tom.txt | sed / ^ Ta / d

Sed är naturligtvis otroligt användbar. Men det är ännu mer kraftfullt i kombination med Awk.

Vad är Awk?

Awk, som Sed, är ett programmeringsspråk som är utformat för att hantera stora textkroppar. Men medan Sed används för att bearbeta och ändra text används Awk mest som verktyg för analys och rapportering.

Som Sed blev Awk först utvecklad på Bell Labs på 1970-talet. Namnet kommer inte från vilket program gör, men snarare efternas efternamn - Alfred Aho, Peter Weinberger och Brian Kernaghan.

Awk fungerar genom att läsa en textfil eller ingångsström en rad i taget. Varje rad skannas för att se om den matchar ett fördefinierat mönster. Om en matchning hittas utförs en åtgärd.

Men medan Sed och Awk kan dela liknande syften är de två helt olika språk, med två helt olika designfilosofier. Awk ligner mer på vissa språk med allmänt ändamål Hur man väljer ett programmeringsspråk för att lära sig idag och få ett bra jobb på 2 år Hur man väljer ett programmeringsspråk för att lära sig idag och få ett bra jobb på 2 år Det kan ta många års arbete med att bli en riktigt bra programmerare; så finns det ett sätt att välja rätt språk att börja från idag, för att bli anställd imorgon? Läs mer, som C, Python och Bash. Det har saker som funktioner och en mer C-liknande inställning till saker som iteration och variabler (James Bruce förklarade hur iteration fungerar. Den absoluta grunden för programmering för nybörjare (del 2). Den absoluta grunden för programmering för nybörjare (del 2) 2 av vår absoluta nybörjare guide till programmering, kommer jag att täcka grunderna för funktioner, returvärden, loopar och conditionals. Se till att du har läst del 1 innan du klarar det här, där jag förklarade ... Läs mer). Enkelt, det känns mer som ett programmeringsspråk.

Så, låt oss prova det. Genom att använda texterna till Take On Me kommer vi att skriva ut alla rader som är längre än 20 tecken.

awk 'längd ($ 0)> 80' tom.txt 

Nästa exempel jag har skamlöst cribbed från den officiella Awk dokumentationen. Men det är ett bra exempel på potentialen i detta kraftfulla, men lilla språk. Det är också en bra demonstration av hur saker som iteration och variabler fungerar i den. Skapa först en fil som heter “WordCount.awk”, och lägg till följande rader.

for (i = 1; i <= NF; i++) freq[$i]++ 
END för (ord i freq) printf "% s \ t% d \ n", ord, freq [word]

Spara det och kör det med följande kommando.

awk -f WordCount.awk tom.txt


Cool, eller hur? Du märker nog att de inte är i någon form av order. Du kan sortera resultaten med hjälp av Unix-sorteringsverktyget. Men vi lämnar det för en annan dag. Vi ska hålla det enkelt.

Kombinera de två

Awk och Sed är båda otroligt kraftfulla när de kombineras. Du kan göra detta med hjälp av Unix-rör. Det är de “|” bitar mellan kommandon.

Låt oss försöka detta: Vi ska lista alla rader i Take On Me som har mer än 20 tecken, med Awk. Sedan ska vi ta bort alla linjer som börjar med “Ta”. Tillsammans ser allt så här ut:

awk 'längd ($ 0)> 20' tom.txt | sed / ^ Ta / d

Och producerar detta:

Låt oss nu vända det. Vi börjar med att ta bort alla linjer som börjar med Ta och rör dem sedan till Awk, där vi räknar hur många gånger varje ord visas. Det ser lite ut så här:

katt tom.txt | sed / ^ Ta / d | awk -f WordCount.awk

The Power of Sed och Awk

Det finns bara så mycket du kan förklara i en enda artikel. Men jag hoppas att jag har illustrerat hur oerhört kraftfull Sed och Awk är. Enkelt sagt, de är ett textbehandlingsaggregat.

Så varför ska du bry dig? Tja, förutom att du aldrig vet när du behöver göra förutsägbara, repeterande ändringar i ett textdokument, är Sed och Awk bra för att analysera loggfiler. Det här är särskilt användbart när du försöker felsöka ett problem i din LAMP-server. Registrerad för SSH-bara webbhotell? Oroa dig inte - Installera enkelt vilken webbprogramvara som registrerats för SSH-bara webbhotell? Oroa dig inte - enkelt installera någon webbprogramvara Vet inte det första med operativsystemet Linux genom sin kraftfulla kommandorad? Oroa dig inte mer. Läs mer, eller titta på dina accessloggar för att se om din server har hackats.

Har du hittat en intressant användning för Sed och Awk? Finns det några andra Linux-verktyg du tycker är undervärderade? Låt mig veta i kommentarerna nedan, och vi chattar.

Utforska mer om: Terminal, Textredigerare.