Reklaam

Kaks kõige kriminaalselt alahinnatud Linuxi utiliiti on Sed ja Awk. Ehkki tõsi, võivad need tunduda pisut kaarekujulised, kui peate kunagi tegema korduvaid muudatusi suurtes koodi- või tekstiosades või kui peate kunagi mõnda teksti analüüsima, on Sed ja Awk hindamatud.

Mis need siis on? Kuidas neid kasutatakse? Ja kuidas need koos kombineerituna teksti töötlemist lihtsamaks muuta?

Mis on Sed?

Sed töötati välja 1971 Bell Labs, legendaarse andmetöötluse teerajaja poolt Lee E. McMahon.

Nimi tähistab voo redigeerija, ja just seda ta teebki. See võimaldab teil redigeerida teksti kehi või vooge programmiliselt, läbi kompaktse ja lihtsa, kuid samas tervikliku programmeerimiskeele.

Toimimisviis on lihtne: see loeb teksti rida-realt puhvrisse. Iga rea ​​jaoks täidab see vajaduse korral eelnevalt määratletud juhiseid.

Näiteks kui keegi kirjutaks Sedi skripti, mis asendas sõna „õlu“ sõnaga „sooda“ ja seejärel edastaks kogu faili sisaldava tekstifaili sõnad “99 pudelit õlut seinale”, läbiks selle faili ridahaaval ja prindiks välja “99 pudelit sooda seinale” ja nii peal.

Kõige elementaarsem Sedi skript on Hello World. Siin kasutame “Tere maailma” printimiseks Unix Echo utiliiti, mis väljub ainult stringidest. Kuid me ühendame selle Sediga ja ütleme, et see asendab sõna „maailm” sõnaga „Dave”. Iseenesestmõistetav värk.

kaja "Tere maailm" | sed s / maailm / Dave
sedawk-dave

Samuti peate Sedi juhiseid failideks ühendama, kui peate mõnda keerulisemat redigeerimist tegema. Inspireeritud see lõbus Redditi niit, Viin laulusõnad A-Ha juurde Võtke mindja asendage kõik “I”, “Mina” ja “Minu” esinemisjuhud Gregiga.

Esiteks panen laulu sõnad tekstifaili nimega tom.txt. Seejärel avan oma eelistatud tekstiredaktori (minu lemmik on Vim 7 peamist põhjust, miks Vimi tekstiredaktorile võimalus andaAastaid olen proovinud ühte tekstiredaktorit teise järel. Sa nimetad seda, ma proovisin seda. Ma kasutasin kõiki neid toimetajaid üle kahe kuu oma esmase igapäevase toimetajana. Millegipärast ma ... Loe rohkem , aga Nano nano vs. vim: terminali tekstiredaktorid võrreldudEhkki Linux on muutunud praktiliselt igaühe jaoks piisavalt hõlpsaks, ilma et peaksite kunagi terminali kasutama, on mõni meist, kes seda regulaarselt kasutab või on uudishimulik, kuidas seda juhtida ... Loe rohkem ja Gedit gedit: üks funktsioonidega täidetud lihtteksti redigeerijaid [Linux ja Windows]Kui mõelda lihtsate tekstiredaktorite peale, siis võib esimene asi, mis teile pähe hüppab, Windowsi märkmikurakendus. See teeb täpselt seda, mida tema ametijuhend kirjeldab - lihtteksti lihtsad omadused ... Loe rohkem on mõlemad suurepärased valikud) ja lisage järgmised read. Veenduge, et loodud fail lõpeb .s.

sed-greg-sed

Võite märgata, et ülaltoodud näites olen end korranud (nt s / mina / Greg / ja s / Me / Greg /). Seda seetõttu, et mõned Sedi versioonid, näiteks see, mis tarnitakse koos Mac OS X-iga, toimivad mitte toetab väiketähtede sobitamist. Selle tulemusel peame iga sõna jaoks kirjutama kaks Sedi juhist, nii et see tunneb ära suurtähtede ja suurtähtedeta versiooni.

See ei tööta ideaalselt, justkui oleksite iga "I", "Mina" ja "Minu" esinemisjuhu käsitsi asendanud. Pidage meeles, et me kasutame seda lihtsalt harjutusena, et näidata, kuidas saate Sedi juhised ühte skripti grupeerida ja neid ühe käsuga täita.

Seejärel peame faili kutsuma. Selleks käivitame selle käsu.

kassi tom.txt | sed -f greg.sed

Laskem aeglustada ja vaatame, mida see teeb. Kotkasilmsed lugejad on märganud, et me oleme mitte kasutades siin kaja. Me kasutame kassi. Sellepärast, et kuigi Cat prindib välja kogu faili sisu, prindib kaja välja ainult faili nime. Olete ka märganud, et meil on Sedil tähis -f. See käsib skripti failina avada.

Lõpptulemus on selline.

sed-greg-skript

Samuti väärib märkimist, et Sed toetab regulaaravaldisi (REGEX). Need võimaldavad teil spetsiaalse ja keerulise süntaksi abil tekstis mustreid määratleda.

Siin on näide selle toimimisest. Me võtame kasutusele eelnimetatud laulusõnad, kuid prindi iga rida välja regexi abil ei ole alustage “Võtke”.

kassi tom.txt | sed / ^ võta / d
sed-regex-võtma

Sed on muidugi uskumatult kasulik. Kuid Awkiga kombineerituna on see veelgi võimsam.

Mis on Awk?

Awk, nagu Sed, on programmeerimiskeel, mis on mõeldud suurte tekstiosadega tegelemiseks. Kuid kuigi teksti Sed kasutatakse teksti töötlemiseks ja muutmiseks, kasutatakse Awki enamasti tööriistana analüüs ja aruandlus.

Nagu Sed, töötati Awk esmakordselt välja Bell Labs'is 1970ndatel. Selle nimi ei tulene programmist teeb, vaid pigem iga autori perekonnanimed - Alfred Aho, Peter Weinberger ja Brian Kernaghan.

Awk töötab tekstifaili või sisestusvoo lugemisega üks rida korraga. Iga rida skannitakse, et näha, kas see vastab eelnevalt määratletud mustrile. Kui leitakse vaste, tehakse toiming.

Kuid kuigi Sedil ja Awkil võivad olla sarnased eesmärgid, on need kaks täiesti erinevat keelt, millel on kaks täiesti erinevat disainifilosoofiat. Awk sarnaneb lähemalt mõnega üldotstarbelised keeled Kuidas valida programmeerimiskeelt, et õppida juba täna ja saada 2 aasta jooksul suurepärast töödTõeliselt heaks programmeerijaks saamiseks võib kuluda aastaid pühendunud tööd; kas on siis võimalus valida sobiv keel alates tänasest, et homme tööle saada? Loe rohkem , nagu C, Python ja Bash. Sellel on sellised asjad nagu funktsioonid ja C-sarnasem lähenemine asjadele nagu iteratsioon ja muutujad (James Bruce selgitas, kuidas iteratsioon töötab Programmeerimise absoluutsed põhitõed algajatele (2. osa)Meie absoluutsete algajate programmeerimisjuhendi 2. osas kirjeldan funktsioonide põhitõdesid, tagasiväärtusi, silmuseid ja tingimusi. Enne selle käsitlemist veenduge, et olete läbi lugenud 1. osa, kus ma selgitasin ... Loe rohkem ). Lihtsamalt öeldes tundub see pigem programmeerimiskeelena.

Proovime siis järele. Kasutades sõna On Take Me Me, prindime kõik read, mis on pikemad kui 20 tähemärki.

awk 'pikkus (0 dollarit)> 80' tom.txt awk-pikkus

Järgmine näide häbitult cribbed alates Awki ametlik dokumentatsioon. Kuid see on suurepärane näide selle võimsa, kuid pisikese keele potentsiaalist. See on ka suurepärane näide sellest, kuidas iteratsioon ja muutujad selles toimivad. Esiteks looge fail nimega WordCount.awk ja lisage järgmised read.

{jaoks (i = 1; i <= NF; i ++) sagedus [$ i] ++ }
END {jaoks (sõna sageduses) printf "% s \ t% d \ n", sõna, sagedus [sõna] }

Salvestage see ja käivitage see järgmise käsuga.

awk -f WordCount.awk tom.txt

awk-wordcount
Lahe, eks? Tõenäoliselt märkate, et nad pole mingisuguses järjekorras. Sina saab sorteerige tulemused Unixi sortimisutiliidi abil. Kuid jätame selle veel üheks päevaks. Me hoiame seda lihtsana.

Nende kahe ühendamine

Awk ja Sed on mõlemad kombineeritult uskumatult võimsad. Seda saate teha Unixi torude abil. Need on "|" bitti käskude vahel.

Proovime seda: loetleme kõik rakenduses Take On Me read, millel on rohkem kui 20 tähemärki, kasutades funktsiooni Awk. Seejärel eemaldame kõik read, mis algavad “Võta”. Koos näeb see kõik välja selline:

awk 'pikkus (0 dollarit)> 20' tom.txt | sed / ^ võta / d

Ja toodab seda:

awk-pikkus-sed

Vaatame nüüd ringi. Alustuseks eemaldame kõik read, mis algavad tähega Take, ja seejärel suuname need Awki, kus arvutatakse, mitu korda iga sõna ilmub. See näeb välja natuke selline:

kassi tom.txt | sed / ^ võta / d | awk -f WordCount.awk
awk-wordcount-sed

Sedi ja Awki jõud

Ühes artiklis saab selgitada vaid nii palju. Kuid ma loodan, et olen illustreerinud, kui suur on Sed ja Awk. Lihtsamalt öeldes on need tekstitöötluse võimla.

Miks sa peaksid hoolima? Lisaks sellele, et te ei tea kunagi, millal peate tekstidokumendis etteaimatavaid ja korduvaid muudatusi tegema, on Sed ja Awk suurepärased ka logifailide parsimiseks. See on eriti mugav siis, kui proovite mõnda probleemi siluda teie LAMP-serveris Kas olete registreerunud ainult SSH-ga veebimajutamiseks? Ärge muretsege - installige veebitarkvara hõlpsaltKas te ei tea esimest asja Linuxi käitamisel selle võimsa käsurea kaudu? Ärge enam muretsege. Loe rohkem , või vaadates oma pääsulogisid, et näha, kas teie serverisse on häkkinud.

Kas olete leidnud Sedi ja Awki jaoks huvitava kasutuse? Kas on veel mõnda Linuxi utiliiti, mida teie arvates alahinnatakse? Andke mulle allpool kommentaarides teada ja me vestleme.

Matthew Hughes on tarkvaraarendaja ja kirjanik Liverpoolist Inglismaalt. Teda leitakse harva, kui tal pole tassi kanget musta kohvi ja ta jumaldab absoluutselt oma MacBook Pro ja oma kaamerat. Tema blogi saate lugeda aadressil http://www.matthewhughes.co.uk ja jälgi teda twitteris aadressil @matthewhughes.