Mainos

Kaksi kaikkein rikollisimmin aliarvioitua Linux-apuohjelmaa ovat Sed ja Awk. Vaikka Sed ja Awk ovatkin totta, ne saattavat tuntua hiukan kaarevalta, jos joudut koskaan tekemään toistuvia muutoksia isoihin koodin tai tekstin osiin tai jos joudut analysoimaan tekstiä, Sed ja Awk ovat korvaamattomia.

Joten mitä ne ovat? Kuinka niitä käytetään? Ja miten ne yhdessä helpottavat tekstin käsittelyä?

Mikä on Sed?

sed kehitettiin vuonna 1971 osoitteessa Bell Labs, legendaarisen tietotekniikan edelläkävijän Lee E. McMahon.

Nimi tarkoittaa stream editor, ja se on sellaista mitä se tekee. Sen avulla voit muokata tekstiä tai tekstiä ohjelmallisesti, pienikokoisen ja yksinkertaisen, mutta yhä täydellisen ohjelmointikielen kautta.

Tapa toimii on yksinkertainen: se lukee tekstiä rivi riviltä puskuriin. Jokaiselle riville se suorittaa tarvittaessa ennalta määritetyt ohjeet.

Esimerkiksi, jos joku kirjoittaa Sed-komentosarjan, joka korvasi sanan “olut” sanalla “sooda”, ja sitten siirrettiin tekstitiedostoon, joka sisälsi koko sanoin sanalle ”99 pulloa olutta seinällä”, se kulkisi tiedoston läpi riviltä ja tulostaisi “99 pulloa sodan seinällä”, ja niin päällä.

instagram viewer

Alkeisin Sed-skripti on Hello World. Käytämme tässä Unix Echo -apuohjelmaa, joka tuottaa vain merkkijonoja, “Hello World” tulostamiseen. Mutta putkitamme tämän Sedille ja sanomme sen korvaamaan ”Maailma” sanalla ”Dave”. Selittäviä juttuja.

kaiku "Hei maailma" | sed s / maailma / Dave
sedawk-dave

Voit myös yhdistää Sed-ohjeet tiedostoiksi, jos sinun on tehtävä monimutkaisempia muokkauksia. Innoittamana tämä iloinen Reddit-säie, Aion viedä sanoitukset A-Ha's: lle Ota minuaja korvata jokainen ”I”, “Me” ja “My” esiintymät Gregillä.

Ensinnäkin, laitan sanat kappaleeseen tekstitiedostoon nimeltään tom.txt. Sitten avaa haluamasi tekstieditori (minun suosikki on Vim 7 tärkeintä syytä antaa Vim-tekstieditorille mahdollisuusOlen vuosien ajan kokeillut yhtä tekstieditoria toisensa jälkeen. Nimesit sen, yritin sitä. Käytin kutakin näistä toimittajista yli kaksi kuukautta ensisijaisena päivittäisenä päätoimittajana. Jotenkin minä ... Lue lisää , mutta nano nano vs. vim: Päätetekstieditorit verrattuVaikka Linuxista on tullut tarpeeksi helppoa käytännössä kenen tahansa käytettäväksi ilman, että koskaan tarvitse käyttää terminaalia, on jotkut meistä, jotka käyttävät sitä säännöllisesti tai ovat uteliaita siitä, kuinka joku voi hallita ... Lue lisää ja gedit gedit: Yksi ominaisuuksiltaan täydellisimmistä tekstiteksteistä [Linux ja Windows]Kun ajattelet pelkkää tekstieditoria, ensimmäinen asia, joka voi hyppää päähänsä, on Windowsin Muistio-sovellus. Se tekee tarkalleen sen, mitä sen työkuvauksessa todetaan - tavallisen tekstin ominaisuudet ... Lue lisää ovat molemmat erinomaisia ​​valintoja) ja lisää seuraavat rivit. Varmista, että luomasi tiedosto loppuu .sed.

sed-greg-sed

Saatat huomata, että yllä olevassa esimerkissä olen toistanut itseni (esim. S / minä / Greg / ja s / Me / Greg /). Tämä johtuu siitä, että jotkut Sedin versiot, kuten se, joka toimitetaan Mac OS X: n kanssa, toimivat ei tukevat kirjainkokoista sopimattomuutta. Seurauksena on, että jokaiselle sanalle meidän on kirjoitettava kaksi Sed-käskyä, joten se tunnistaa isojen ja isojen kirjaimien version.

Tämä ei toimi täydellisesti, ikään kuin olet korvannut kaikki "minä", "minä" ja "oma" esiintymät käsin. Muista, että käytämme tätä vain harjoituksena osoittaaksesi, kuinka voit ryhmitellä Sed-ohjeet yhdeksi komentosarjaksi ja suorittaa ne sitten yhdellä komennolla.

Sitten meidän on käynnistettävä tiedosto. Suorittaaksemme tämän komennon.

kissan tom.txt | sed -f greg.sed

Hidastamme ja katsotaan mitä tämä tekee. Kotkasilmäiset lukijat ovat huomanneet, että olemme ei käyttämällä kaikua täällä. Käytämme Catia. Koska Cat tulostaa tiedoston koko sisällön, echo tulostaa vain tiedostonimen. Olet myös huomannut, että käytämme Sed-merkkiä -f. Tämä käskee avaamaan skriptin tiedostona.

Lopputulos on tämä.

sed-greg-skripti

On myös syytä huomata, että Sed tukee säännöllisiä lausekkeita (REGEX). Niiden avulla voit määritellä kuviot tekstissä käyttämällä erityistä ja monimutkaista syntaksia.

Tässä on esimerkki siitä, kuinka tämä saattaa toimia. Aiomme ottaa yllä mainitut laulusanat, mutta tulostamme jokaisen rivin regexillä ei aloita “Ota”.

kissan tom.txt | sed / ^ Ota / d
sed-regex-take

Sed on tietysti uskomattoman hyödyllinen. Mutta se on vieläkin tehokkaampi yhdistettynä Awkiin.

Mikä on Awk?

awk, kuten Sed, on ohjelmointikieli, joka on suunniteltu käsittelemään suuria tekstiä. Mutta vaikka Sediä käytetään prosessoimaan ja muokkaamaan tekstiä, Awkia käytetään enimmäkseen työkaluna analyysi ja raportointi.

Kuten Sed, Awk kehitettiin ensimmäisen kerran Bell Labs -yrityksessä 1970-luvulla. Sen nimi ei ole peräisin ohjelmasta tekee, vaan pikemminkin kunkin kirjailijan sukunimet - Alfred Aho, Peter Weinberger ja Brian Kernaghan.

Awk toimii lukemalla tekstitiedoston tai syöttövirran yhdellä rivillä kerrallaan. Jokainen rivi tarkistetaan, vastaako se ennalta määritettyä mallia. Jos vastaavuus löytyy, toiminto suoritetaan.

Mutta vaikka Sedillä ja Awkilla voi olla samanlaisia ​​tarkoituksia, he ovat kaksi täysin erilaista kieltä, joilla on kaksi täysin erilaista suunnittelufilosofiaa. Awk muistuttaa enemmän yleiskielet Kuinka valita ohjelmointikieli, jotta voit oppia tänään ja saada hienoa työtä 2 vuodessaTodella hyväksi ohjelmoijaksi voi viedä vuosia omistautunutta työtä; Joten onko olemassa tapa valita oikea kieli aloittaakseen tänään, jotta voit palkata huomenna? Lue lisää , kuten C, Python ja Bash. Siinä on asioita, kuten funktiot, ja C-tyyppisempi lähestymistapa asioihin, kuten iterointi ja muuttujat (James Bruce selitti kuinka iterointi toimii Ohjelmoinnin ehdoton perusteet aloittelijoille (osa 2)Ohjelmoinnin absoluuttisen aloittelijan oppaan osassa 2 kerron toimintojen perusteet, palautusarvot, silmukat ja ehdolliset ehdot. Varmista, että olet lukenut osan 1 ennen kuin käsittelet tätä, missä selitin ... Lue lisää ). Yksinkertaisesti sanottuna, se tuntuu enemmän kuin ohjelmointikieli.

Kokeillaan niin. Lyrics avulla Take On Me tulostetaan kaikki yli 20 merkkiä pitkät rivit.

awk 'pituus (0 dollaria)> 80' tom.txt awk-pituus

Seuraava esimerkki häpeämättömästi cribbed alkaen viralliset Awk-asiakirjat. Mutta se on loistava esimerkki tämän voimakkaan, mutta pienen kielen mahdollisuuksista. Se on myös loistava esimerkki siitä, kuinka iterointi ja muuttujat toimivat siinä. Luo ensin tiedosto, jonka nimi on “WordCount.awk”, ja lisää seuraavat rivit.

{varten (i = 1; i <= NF; i ++) Freq [$ i] ++ }
END {for (sana taajuudella) printf "% s \ t% d \ n", sana, taajuus [sana] }

Tallenna se ja suorita se seuraavalla komennolla.

awk -f WordCount.awk tom.txt

awk-wordcount
Hienoa, eikö? Huomaat todennäköisesti, että heillä ei ole minkäänlaista järjestystä. Sinä voida lajitella tulokset Unix-lajitteluapuohjelmalla. Mutta jätämme sen toiselle päivälle. Pidämme sen yksinkertaisena.

Yhdistämällä nämä kaksi

Awk ja Sed ovat molemmat uskomattoman tehokkaita yhdistettynä. Voit tehdä tämän käyttämällä Unix-putkia. Ne ovat "|" bittiä komentojen välillä.

Kokeillaan tätä: Luettelemme kaikki Take On Me -rivit, joissa on enemmän kuin 20 merkkiä, Awk: lla. Sitten poistamme kaikki linjat, jotka alkavat ”Take”. Yhdessä se kaikki näyttää tältä:

awk 'pituus (0 dollaria)> 20' tom.txt | sed / ^ Ota / d

Ja tuottaa tämän:

awk-pituus-sed

Nyt käännellään sitä ympäri. Aloitamme poistamalla kaikki Rivit, jotka alkavat merkinnällä Take, ja putket sitten ne Awkiin, missä lasketaan kuinka monta kertaa kukin sana esiintyy. Se näyttää vähän näin:

kissan tom.txt | sed / ^ Ota / d | awk -f WordCount.awk
awk-wordcount-sed

Sedin ja Awk: n voima

Yhdessä artikkelissa voi selittää vain niin paljon. Mutta toivon, että olen kuvannut kuinka mittaamattoman voimakkaita Sed ja Awk ovat. Yksinkertaisesti sanottuna, ne ovat tekstinkäsittelylaite.

Joten miksi sinun pitäisi välittää? Sen lisäksi, että et koskaan tiedä milloin sinun on tehtävä ennustettavia, toistuvia muutoksia tekstiasiakirjaan, Sed ja Awk ovat hienoja lokitiedostojen jäsentämiseen. Tämä on erityisen kätevää, kun yrität korjata ongelmaa LAMP-palvelimellasi Oletko kirjautunut vain SSH-verkkopalveluun? Älä huoli - Asenna kaikki Web-ohjelmistot helpostiEtkö tiedä ensimmäistä asiaa Linuxin käyttämisestä tehokkaan komentorivin kautta? Älä hätää enää. Lue lisää tai tarkastelemalla käyttölokejasi nähdäksesi, onko palvelimellesi hakkeroitu.

Oletko löytänyt mielenkiintoisen käytön Sedille ja Awkille? Onko muita Linux-apuohjelmia, joiden mielestäsi aliarvioidaan? Kerro siitä alla olevissa kommenteissa, ja me keskustelemme.

Matthew Hughes on ohjelmistokehittäjä ja kirjailija Liverpoolista, Englannista. Hän on harvoin löydetty ilman kuppia vahvaa mustaa kahvia kädessään ja ihailee ehdottomasti MacBook Prota ja kameraansa. Voit lukea hänen bloginsa osoitteessa http://www.matthewhughes.co.uk ja seuraa häntä twitterissä osoitteessa @matthewhughes.