Hver Linux Geek trenger å vite Sed og Awk. Her er hvorfor ...
To av de mest kriminelt undervurderte Linux-verktøyene er Sed og Awk. Selv om de selvsagt kan virke litt bane, hvis du noen gang må gjøre repeterende endringer i store stykker kode eller tekst, eller hvis du noen gang må analysere litt tekst, er Sed og Awk uvurderlige.
Så, hva er de? Hvordan brukes de? Og hvordan, når de kombineres, gjør de det lettere å behandle tekst?
Hva er sed?
Sed ble utviklet i 1971 på Bell Labs, av legendariske datapioner Lee E. McMahon.
Navnet står for stream editor, og det er ganske bra hva det gjør. Den lar deg redigere organer eller strømmer av tekst programma, gjennom et kompakt og enkelt, men likevel Turing-komplett programmeringsspråk.
Måten den fungerer på er enkel: den leser tekst, linje for linje i en buffer. For hver linje utfører den de forhåndsdefinerte instruksjonene, der det er aktuelt.
For eksempel, hvis noen skulle skrive et Sed-skript som erstattet ordet “øl” med “soda”, og deretter passert i en tekstfil som inneholdt hele teksten til “99 flasker øl på veggen”, det ville gå gjennom den filen på linje for linje, og skrive ut “99 flasker soda på veggen”, og så videre.
Det mest grunnleggende Sed-skriptet er en Hello World One. Her bruker vi Unix Echo-verktøyet, som bare utfører strenge, for å skrive ut “Hei Verden”. Men vi rør dette til Sed, og fortell det å erstatte “Verden” med”Dave”. Selvforklarende ting.
ekko "Hello World" | sed s / world / Dave
Du kan også kombinere Sed-instruksjoner i filer, hvis du trenger å gjøre noe mer komplisert redigering. Inspirert av denne morsomme Reddit-tråden, skal jeg ta teksten til A-Ha Ta på meg, og erstatt hver forekomst av “Jeg”, “Meg”, og “Min”, med Greg.
Først legger jeg teksten til sangen i en tekstfil som heter tom.txt. Da åpner jeg min foretrukne tekstredigerer (min favoritt er Vim Topp 7 grunner til å gi Vim Text Editor en sjanse Topp 7 grunner til å gi Vim Text Editor En sjanse I mange år har jeg prøvd en tekstredigerer etter Jeg har brukt hver og en av disse redaktørene i over to måneder som min primære daglige redaktør. En eller annen måte, jeg ... Les mer, men Nano nano vs vim: Terminal Text Editors Sammenlignet nano vs vim: Terminal Text Editors Sammenlignet Selv om Linux har blitt enkelt nok til praktisk talt alle som bruker uten å måtte bruke Terminal, er det noen av oss som regelmessig bruker det eller er nysgjerrige på hvordan man kan kontrollere ... Les mer og Gedit gedit: En av de mest funksjonsfylte, enkle tekstredigerere [Linux & Windows] gedit: En av de mest funksjonsfylte vanlige tekstredigerere [Linux og Windows] Når du tenker på enkle tekstredigerere, er det første som kan komme inn i Hodet ditt er Windows Notisblokk-applikasjon. Det gjør akkurat hva det er jobbbeskrivelse stater - enkle funksjoner for en ren tekst ... Les mer er begge gode valg), og legg til følgende linjer. Kontroller at filen du lager, slutter med .sed.
Du kan legge merke til at i eksemplet ovenfor har jeg gjentatt meg selv (for eksempel s / meg / Greg / og s / Me / Greg /). Det er fordi noen versjoner av Sed, som den som sender med Mac OS X, gjør ikke støtter ikke-følsom samsvarende. Som et resultat må vi skrive to Sed-instruksjoner for hvert ord, så det gjenkjenner den kapitaliserte og uncapitalized versjonen.
Dette virker ikke perfekt, som om du har erstattet hver forekomst av “Jeg”, “Meg”, og “Min” for hånd. Husk at vi bare bruker dette som en øvelse for å demonstrere hvordan du kan gruppere Sed-instruksjoner i ett skript, og deretter utføre dem med en enkelt kommando.
Da må vi påkalle filen. For å gjøre det, kjører vi denne kommandoen.
katt tom.txt | sed-f greg.sed
La oss sakte og se på hva dette gjør. Eagle-eyed lesere vil ha lagt merke til det vi er ikke bruker ekko her. Vi bruker Cat. Det er fordi mens Cat skal skrive ut hele innholdet i filen, vil ekko bare skrive ut filnavnet. Du har også lagt merke til at vi kjører Sed med “-f” flagg. Dette forteller at den skal åpne skriptet som en fil.
Sluttresultatet er dette.
Det er også verdt å merke seg at Sed støtter regulære uttrykk (REGEX). Disse lar deg definere mønstre i tekst, ved hjelp av en spesiell og komplisert syntaks.
Her er et eksempel på hvordan det kan fungere. Vi skal ta de nevnte sangtekstene, men bruk regex for å skrive ut hver linje som ikke starte med “Ta”.
katt tom.txt | sed / ^ Ta / d
Sed er selvfølgelig utrolig nyttig. Men det er enda sterkere når kombinert med Awk.
Hva er Awk?
Awk, som Sed, er et programmeringsspråk designet for å håndtere store tekstkropper. Men mens Sed brukes til å behandle og modifisere tekst, er Awk mest brukt som et verktøy for analyse og rapportering.
Som Sed ble Awk først utviklet hos Bell Labs på 1970-tallet. Navnet kommer ikke fra det programmet gjør, men heller etternavnene til hver av forfatterne - Alfred Aho, Peter Weinberger, og Brian Kernaghan.
Awk fungerer ved å lese en tekstfil eller en innmatingsstrøm en linje om gangen. Hver linje er skannet for å se om den samsvarer med et forhåndsdefinert mønster. Hvis en kamp er funnet, utføres en handling.
Men mens Sed og Awk kan dele lignende formål, er de to helt forskjellige språk, med to helt forskjellige designfilosofier. Awk ligner nærmere på noen generelle språk. Hvordan velge et programmeringsspråk for å lære i dag og få en god jobb på 2 år. Hvordan velge et programmeringsspråk for å lære i dag og få en god jobb om 2 år. Det kan ta mange år med dedikert arbeid å bli en virkelig god programmerer; så er det en måte å velge riktig språk for å starte fra i dag, for å bli ansatt i morgen? Les mer, som C, Python og Bash. Det har ting som funksjoner, og en mer C-lignende tilnærming til ting som iterasjon og variabler (James Bruce forklart hvordan iterasjon fungerer. Absolutt grunnleggende programmering for nybegynnere (del 2) Absolutt grunnleggende programmering for nybegynnere (del 2) Til dels 2 av våre absolutt nybegynnere guide til programmering, vil jeg dekke grunnleggende funksjoner, returverdier, looper og conditionals. Pass på at du har lest del 1 før du takler dette, der jeg forklarte ... Les mer). Enkelt sagt, det føles mer som et programmeringsspråk.
Så, la oss prøve det ut. Ved å bruke teksten til Take On Me, skal vi skrive ut alle linjene som er lengre enn 20 tegn.
awk 'lengde ($ 0)> 80' tom.txt
Det neste eksemplet jeg har skamløst cribbed fra den offisielle AWK dokumentasjonen. Men det er et godt eksempel på potensialet til dette kraftige, men lite språk. Det er også en god demonstrasjon av hvordan ting som iterasjon og variabler fungerer i den. Først oppretter du en fil som heter “WordCount.awk”, og legg til følgende linjer.
for (i = 1; i <= NF; i++) freq[$i]++
END for (ord i freq) printf "% s \ t% d \ n", ord, freq [ord]
Lagre det, og kjør det med følgende kommando.
awk -f WordCount.awk tom.txt
Cool, ikke sant? Du vil sikkert merke at de ikke er i noen form for rekkefølge. Du kan sortere resultatene ved hjelp av Unix-sorteringsverktøyet. Men vi forlater det for en annen dag. Vi skal holde det enkelt.
Kombinerer de to
Awk og Sed er begge utrolig kraftige når de kombineres. Du kan gjøre dette ved å bruke Unix-rør. Det er de “|” biter mellom kommandoer.
La oss prøve dette: Vi skal liste alle linjene i Ta på meg som har mer enn 20 tegn, ved hjelp av Awk. Da skal vi stripe alle linjene som begynner med “Ta”. Sammen ser alt slik ut:
awk 'lengde ($ 0)> 20' tom.txt | sed / ^ Ta / d
Og produserer dette:
La oss snu den rundt. Vi skal begynne med å fjerne alle linjene som starter med Ta, og rør dem deretter til Awk, hvor vi teller hvor mange ganger hvert ord vises. Det ser litt ut som dette:
katt tom.txt | sed / ^ Take / d | awk -f WordCount.awk
The Power of Sed og Awk
Det er bare så mye du kan forklare i en enkelt artikkel. Men jeg håper jeg har illustrert hvordan umåtelig kraftig Sed og Awk er. Enkelt sagt, de er et tekstbehandlingsanlegg.
Så hvorfor skal du bryr deg? Vel, foruten det faktum at du aldri vet når du må gjøre forutsigbare, repeterende endringer i et tekstdokument, er Sed og Awk bra for å analysere loggfiler. Dette er spesielt nyttig når du prøver å feilsøke et problem i LAMP-serveren din Signed Up for SSH-only Web Hosting? Ikke vær bekymret - enkelt installer hvilken som helst webprogramvare som er registrert for SSH-only web hosting? Ikke vær bekymret - enkelt installer hvilken som helst webprogramvare. Kjenner ikke den første tingen om operativsystemet Linux gjennom sin kraftige kommandolinje? Bekymre ikke mer. Les mer, eller se på tilgangsloggene dine for å se om serveren din er blitt hacket.
Har du funnet en interessant bruk for Sed og Awk? Er det noen andre Linux-verktøy du føler deg undervurderte? Gi meg beskjed i kommentarene nedenfor, og vi vil chatte.
Utforsk mer om: Terminal, Tekstredigerer.