Hver Linux-geek behøver at kende Sed og Awk. Her er hvorfor ...

  • William Charles
  • 0
  • 1972
  • 396
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 arkane, hvis du nogensinde er nødt til at foretage gentagne ændringer til store stykker kode eller tekst, eller hvis du nogensinde skal 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 på Bell Labs af den legendariske datapionier Lee E. McMahon.

Navnet står for streameditor, og det er lidt, 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 sendt i en tekstfil, der indeholdt hele teksterne til “99 flasker øl på væggen”, det ville gå igennem denne fil på linje for linje og udskrive “99 flasker soda på væggen”, og så videre.

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

ekko "Hello World" | sed s / verden / 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 tager jeg teksterne til A-Ha's Tag på mig, og erstatte hver forekomst 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 The Top 7 Årsager til at give Vim Text Editor en chance De Top 7 Årsager til at give Vim Text Editor en chance I årevis har jeg prøvet en teksteditor efter en 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 gjorde jeg…, men Nano nano vs. vim: Terminal Text Editors Sammenlignet nano vs. vim: Terminal Text Editors Sammenlignet Selvom 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… og Gedit gedit: Én Af de mest funktionsfyldte almindelige teksteditorer [Linux & Windows] gedit: En af de mest funktionsfyldte almindelige teksteditorer [Linux & Windows] Når du tænker på almindelig tekstredaktører, er den første ting, der måske dukker op i dit hoved, Windows "Notepad-applikation. Det gør nøjagtigt, hvad dens jobbeskrivelse st ting - almindelige funktioner til en almindelig tekst… er begge fremragende valg), og tilføj følgende linjer. Sørg for, at den fil, du opretter, slutter med .sed.

Du kan bemærke, at i eksemplet ovenfor har jeg 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 forekomst af “jeg”, “Mig”, og “Min” med hånden. 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 bremse 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” flag. Dette fortæller det at åbne scriptet som en fil.

Slutresultatet er dette.

Det er også værd at bemærke, at Sed understøtter regulære 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 førnævnte sangtekster, men brug regex til at udskrive hver linje der ikke start med “Tage”.

kat tom.txt | sed / ^ Tag / d

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

Hvad er awk?

Awk er ligesom Sed 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 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 2 år Sådan vælger du et programmeringssprog for at lære i dag og få et fantastisk job om 2 år Det 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? , 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. Absolute Basics Of Programming For Beginners (Del 2) The Absolute Basics Of Programming For Beginners (Del 2)) 2 af vores absolutte begynderguide til programmering, jeg vil 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 løser dette, hvor jeg forklarede…). Kort sagt føles det mere som et programmeringssprog.

Så lad os prøve det. Brug af teksterne til Take On Me, vi udskriver alle linjer, der er længere end 20 tegn.

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

Det næste eksempel har jeg skamløst cribbed 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 i det. 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


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 forlader 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. Disse er “|” bits mellem kommandoer.

Lad os prøve dette: Vi vil liste alle linjerne i Take On Me, der har mere end 20 tegn, ved hjælp af Awk. Derefter skal vi stribe alle de 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:

Lad os nu vende det rundt. Vi begynder med at fjerne alle linjer, der starter med Take, og derefter rør 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

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 i din LAMP-server Tilmeldt SSH-kun Web Hosting? Vær ikke bekymret - Installér let websoftware, der er tilmeldt SSH-kun Web Hosting? Vær ikke bekymret - Installer let websoftware Kender du ikke den første ting til at betjene Linux gennem dens magtfulde kommandolinje? Bekymre dig ikke 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, som du føler, at du er underværdsat? Fortæl mig det i kommentarerne nedenfor, så chatter vi.




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.