Reklame

To af de mest kriminelt under-værdsatte Linux-værktøjer er Sed og Awk. Selvom de ganske vist kan virke en smule arcane, hvis du nogensinde er nødt til at foretage gentagne ændringer til store stykker kode eller tekst, eller hvis du nogensinde er nødt til at analysere noget tekst, er Sed og Awk uvurderlige.

Så hvad er de? Hvordan bruges de? Og hvordan, når de kombineres sammen, gør de det lettere at behandle tekst?

Hvad er Sed?

sed blev udviklet i 1971 kl Bell Labs, af den legendariske computerpioner Lee E. McMahon.

Navnet står for streameditor, og det er sådan, hvad det gør. Det giver dig mulighed for at redigere organer eller streams af tekst programmatisk, gennem et kompakt og enkelt, men alligevel Turing-komplet programmeringssprog.

Den måde, det fungerer på, er enkel: Den læser tekst, linje for linje i en buffer. For hver linje udfører den de foruddefinerede instruktioner, hvor det er relevant.

For eksempel, hvis nogen skulle skrive et Sed-script, der erstattede ordet "øl" med "soda", og derefter gik i en tekstfil, der indeholdt hele tekster til "99 flasker øl på væggen", det ville gå gennem den fil på linje for linje-basis og udskrive "99 flasker soda på væggen", og så på.

instagram viewer

Det mest basale Sed-script er en Hello World. Her bruger vi Unix Echo-værktøjet, der kun udskriver strenge, til at udskrive "Hello World". Men vi rører dette til Sed, og fortæller det at erstatte "Verden" med "Dave". Selvforklarende ting.

ekko "Hello World" | sed s / verden / Dave
sedawk-dave

Du kan også kombinere Sed-instruktioner i filer, hvis du har brug for noget mere kompliceret redigering. Inspireret af denne sjove Reddit tråd, Jeg tager teksterne til A-Ha's Tag på mig, og udskift hvert tilfælde af "Jeg", "Mig" og "Min" med Greg.

Først lægger jeg teksterne til sangen i en tekstfil, der kaldes tom.txt. Så åbner jeg min foretrukne teksteditor (min favorit er Vim De 7 vigtigste grunde til at give Vim-teksteditoren en chanceI årevis har jeg prøvet den ene teksteditor efter den anden. Navn det, jeg prøvede det. Jeg brugte hver eneste af disse redaktører i over to måneder som min primære daglige redaktør. På en eller anden måde ... Læs mere , men Nano nano vs. vim: Terminal-teksteditorer sammenlignetSelvom Linux er blevet let nok til, at praktisk talt enhver kan bruge uden nogensinde at skulle bruge terminalen, er der nogle af os, der regelmæssigt bruger den eller er nysgerrige efter, hvordan man kan kontrollere ... Læs mere og gedit gedit: En af de mest funktionsfyldte almindelige teksteditorer [Linux & Windows]Når du tænker på almindelige tekstredigerere, er den første ting, der kan komme ind i dit hoved, Windows 'Notepad-applikation. Det gør nøjagtigt, som det står i jobbeskrivelsen - almindelige funktioner til en almindelig tekst ... Læs mere er begge fremragende valg), og tilføj følgende linjer. Sørg for, at den fil, du opretter, slutter med .sed.

sed-greg-sed

Du vil muligvis bemærke, at jeg i eksemplet ovenfor har gentaget mig (f.eks. S / mig / Greg / og s / Me / Greg /). Det skyldes, at nogle versioner af Sed, som den, der leveres med Mac OS X, gør ikke understøttelse af sansefølsom matchning. Som et resultat er vi nødt til at skrive en to Sed-instruktioner for hvert ord, så det genkender den aktiverede og ukapitaliserede version.

Dette fungerer ikke perfekt, som om du har erstattet hver enkelt forekomst af "Jeg", "Mig" og "Min" for hånd. Husk, vi bruger bare dette som en øvelse til at demonstrere, hvordan du kan gruppere Sed-instruktioner i et script og derefter udføre dem med en enkelt kommando.

Derefter er vi nødt til at påberåbe sig filen. For at gøre det kører vi denne kommando.

kat tom.txt | sed -f greg.sed

Lad os gå langsommere og se, hvad det gør. Eagle-eyed læsere vil have bemærket vi er ikke ved hjælp af Echo her. Vi bruger Cat. Det skyldes, at mens Cat udskriver hele indholdet af filen, ekko udskriver kun filnavnet. Du har også bemærket, at vi kører Sed med “-f” -flagget. Dette fortæller det at åbne scriptet som en fil.

Slutresultatet er dette.

sed-greg-script

Det er også værd at bemærke, at Sed understøtter regelmæssige udtryk (REGEX). Disse giver dig mulighed for at definere mønstre i tekst ved hjælp af en speciel og kompliceret syntaks.

Her er et eksempel på, hvordan det kan fungere. Vi tager de nævnte sangtekster, men brug regex til at udskrive hver linje der ikke start med "Take".

kat tom.txt | sed / ^ Tag / d
sed-regex-take

Sed er naturligvis utroligt nyttigt. Men det er endnu mere magtfuldt, når det kombineres med Awk.

Hvad er Awk?

awkligesom Sed er et programmeringssprog designet til at håndtere store tekstlegemer. Men mens Sed bruges til at behandle og ændre tekst, bruges Awk mest som et værktøj til analyse og rapportering.

Ligesom Sed blev Awk først udviklet på Bell Labs i 1970'erne. Dets navn kommer ikke fra, hvad programmet har gør, men snarere efternavnene til hver af forfatterne - Alfred Aho, Peter Weinberger og Brian Kernaghan.

Awk fungerer ved at læse en tekstfil eller inputstrøm en linje ad gangen. Hver linje scannes for at se, om den stemmer overens med et foruddefineret mønster. Hvis der findes en kamp, ​​udføres en handling.

Men mens Sed og Awk måske deler lignende formål, er de to helt forskellige sprog med to helt forskellige designfilosofier. Awk minder mere om nogle generelle sprog Sådan vælger du et programmeringssprog for at lære i dag og få et godt job om to årDet kan tage år med dedikeret arbejde at blive en virkelig god programmør; så er der en måde at vælge det rigtige sprog til at starte fra i dag for at blive ansat i morgen? Læs mere , ligesom C, Python og Bash. Det har ting som funktioner og en mere C-lignende tilgang til ting som iteration og variabler (James Bruce forklarede, hvordan iteration fungerer Det absolutte grundlæggende ved programmering for begyndere (del 2)I del 2 af vores absolutte begynderguide til programmering vil jeg dække det grundlæggende om funktioner, returneringsværdier, loops og conditionals. Sørg for, at du har læst del 1, før du takler dette, hvor jeg forklarede ... Læs mere ). Kort sagt føles det mere som et programmeringssprog.

Så lad os prøve det. Ved hjælp af teksterne til Take On Me vil vi udskrive alle linjer, der er længere end 20 tegn.

awk 'længde ($ 0)> 80' tom.txt awk-længde

Det næste eksempel har jeg skamløst krybbet fra den officielle Awk-dokumentation. Men det er et godt eksempel på potentialet i dette magtfulde, men alligevel lille sprog. Det er også en fantastisk demonstration af, hvordan ting som iteration og variabler fungerer deri. Opret først en fil kaldet “WordCount.awk”, og tilføj følgende linjer.

{for (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {for (word in freq) printf "% s \ t% d \ n", word, freq [word] }

Gem det, og kør det derefter med følgende kommando.

awk -f WordCount.awk tom.txt

awk-WORDCOUNT
Sej, ikke? Du vil sandsynligvis bemærke, at de ikke er i nogen form for rækkefølge. Du kan sortere resultaterne ved hjælp af Unix-sorteringsværktøjet. Men vi overlader det til en anden dag. Vi vil holde det enkelt.

Kombination af de to

Awk og Sed er begge utroligt magtfulde når de kombineres. Du kan gøre dette ved at bruge Unix-rør. Det er "|" bits mellem kommandoer.

Lad os prøve dette: Vi vil liste alle linjerne i Take On Me, der har mere end 20 tegn, vha. Awk. Derefter vil vi stribe alle linjer, der begynder med "Tage". Sammen ser det hele sådan ud:

awk 'længde ($ 0)> 20' tom.txt | sed / ^ Tag / d

Og producerer dette:

awk-længde-sed

Lad os vende det rundt. Vi vil starte med at fjerne alle de linjer, der starter med Take, og derefter røre dem til Awk, hvor vi tæller, hvor mange gange hvert ord vises. Det ser lidt sådan ud:

kat tom.txt | sed / ^ Take / d | awk -f WordCount.awk
awk-WORDCOUNT-sed

Kraften i Sed og Awk

Der er kun så meget, du kan forklare i en enkelt artikel. Men jeg håber, jeg har illustreret, hvor umådeligt kraftfuld Sed og Awk er. Kort sagt, de er et tekstbehandlingscenter.

Så hvorfor skulle du passe på? Nå, udover det faktum, at du aldrig ved, hvornår du skal foretage forudsigelige, gentagne ændringer til et tekstdokument, er Sed og Awk dejlige til at analysere logfiler. Dette er især praktisk, når du prøver at fejlsøge et problem på din LAMP-server Tilmeldt dig SSH-kun webhosting? Vær ikke bekymret - Installer let websoftware letVed du ikke den første ting ved at betjene Linux gennem dens kraftfulde kommandolinje? Bekymre dig ikke mere. Læs mere , eller se på dine adgangslogger for at se, om din server er blevet hacket.

Har du fundet en interessant brug af Sed og Awk? Er der andre Linux-værktøjer, du føler, at du er underværdsat? Fortæl mig det i kommentarerne herunder, så vi chatter.

Matthew Hughes er en softwareudvikler og forfatter fra Liverpool, England. Han findes sjældent uden en kop stærk sort kaffe i hånden og forguder absolut sin Macbook Pro og hans kamera. Du kan læse hans blog på http://www.matthewhughes.co.uk og følg ham på twitter på @matthewhughes.