Publicitate

Două dintre utilitățile Linux cele mai subapreciate penal sunt Sed și Awk. Deși, în mod cert, pot părea un pic arcane, dacă trebuie să faceți vreodată modificări repetitive la bucăți mari de cod sau text sau dacă trebuie să analizați vreun text, Sed și Awk sunt de neprețuit.

Deci, ce sunt? Cum sunt utilizate? Și cum, atunci când sunt combinate împreună, facilitează procesarea textului mai ușor?

Ce este Sed?

sed a fost dezvoltat în 1971 la Laboratoarele Bell, de către pionierul legendar al calculelor Lee E. McMahon.

Numele înseamnă editor de fluxși asta este cam ce face. Vă permite să editați corpuri sau fluxuri de text programatică, printr-un limbaj de programare compact și simplu, dar totuși Turing-complet.

Modul în care funcționează este simplu: citește text, linie cu linie într-un tampon. Pentru fiecare linie, va efectua instrucțiunile predefinite, dacă este cazul.

De exemplu, dacă cineva ar fi scris un script Sed care înlocuia cuvântul „bere” cu „sifon”, și apoi trecea într-un fișier text care conținea întregul versuri la „99 de sticle de bere pe perete”, acesta ar parcurge acel fișier de la o linie la fiecare și ar imprima „99 de sticle de sodă pe perete”, etc. pe.

Scriptul Sed cel mai de bază este unul Hello World. Aici, folosim utilitatea Unix Echo, care pur și simplu scoate șiruri, pentru a imprima „Hello World”. Dar o facem pe Sed și îi spunem să înlocuiască „Lumea” cu „Dave”. Lucruri explicative de sine.

ecou „Hello World” | sed s / world / Dave
sedawk-dave

Puteți combina, de asemenea, instrucțiunile Sed în fișiere, dacă trebuie să faceți o editare mai complicată. Inspirat de acest fir hilare Reddit, Voi duce versurile în versurile lui A-Ha Take On Meși înlocuiți fiecare instanță din „Eu”, „Eu” și „Mea” cu Greg.

În primul rând, voi pune versurile la melodie într-un fișier text numit tom.txt. Apoi, voi deschide editorul de text preferat (al meu favorit este Vim Top 7 motive pentru a oferi editorului de text Vim o șansăAni de zile, am încercat un editor de text după altul. Îl numești, am încercat. Am folosit fiecare dintre acești editori de peste două luni ca redactor principal al meu de zi cu zi. Cumva, eu ... Citeste mai mult , dar Nano nano vs. vim: Terminal Editori de text în comparațieDeși Linux a devenit suficient de ușor pentru practicarea oricui, fără a fi nevoie să folosească Terminalul, există unii dintre noi care îl folosesc în mod regulat sau suntem curioși despre modul în care se poate controla ... Citeste mai mult și gedit gedit: Unul dintre cei mai mulți editori de text simplu plini de caracteristici [Linux și Windows]Când vă gândiți la editori de text simplu, primul lucru care vă poate apărea în cap este aplicația Notepad pentru Windows. Face exact ceea ce descrie descrierea postului - caracteristici simple pentru un text simplu ... Citeste mai mult sunt ambele alegeri excelente) și adăugați următoarele rânduri. Asigurați-vă că fișierul cu care creați se încheie .sed.

sed-greg-sed

Este posibil să observați că, în exemplul de mai sus, m-am repetat (de exemplu, s / me / Greg / și s / Me / Greg /). Acest lucru se datorează faptului că unele versiuni de Sed, precum cea care este livrată cu Mac OS X, o fac nu suporta potrivirea nesemnificativa a cazurilor Drept urmare, trebuie să scriem două instrucțiuni Sed pentru fiecare cuvânt, astfel încât să recunoască versiunea cu majusculă și necapitalizată.

Acest lucru nu va funcționa perfect, de parcă ai înlocui fiecare mână de exemplu „Eu”, „Eu” și „Mea”. Nu uitați, folosim acest lucru doar ca un exercițiu pentru a demonstra cum puteți grupa instrucțiunile Sed într-un singur script și apoi să le executați cu o singură comandă.

Apoi, trebuie să invocăm fișierul. Pentru a face acest lucru, executăm această comandă.

pisica tom.txt | sed -f greg.sed

Să încetinesc și să ne uităm la ce face asta. Cititorii cu ochi de vultur vor fi observat că suntem nu folosind Echo aici. Folosim Cat. Acest lucru se datorează faptului că, în timp ce Cat va tipări întregul conținut al fișierului, ecoul va tipări doar numele fișierului. Veți observa, de asemenea, că rulăm Sed cu steagul „-f”. Acest lucru îi spune să deschidă scriptul ca fișier.

Rezultatul final este acesta.

sed-script-greg

De menționat, de asemenea, că Sed acceptă expresii obișnuite (REGEX). Acestea vă permit să definiți tiparele în text, folosind o sintaxă specială și complicată.

Iată un exemplu despre cum ar putea funcționa acest lucru. Vom lua versurile melodiei menționate anterior, dar vom folosi regex pentru a tipări fiecare linie nu începe cu „Take”.

pisica tom.txt | sed / ^ Ia / d
sed-regex-take

Sed este, desigur, incredibil de util. Dar este și mai puternic atunci când este combinat cu Awk.

Ce este Awk?

awk, precum Sed, este un limbaj de programare conceput pentru a trata cu corpuri mari de text. Dar, în timp ce Sed este utilizat pentru procesarea și modificarea textului, Awk este utilizat în cea mai mare parte ca instrument pentru analiză și raportare.

La fel ca Sed, Awk a fost dezvoltat pentru prima dată la Bell Labs în anii ’70. Numele său nu provine din program face, ci mai degrabă prenumele fiecăruia dintre autori - Alfred Aho, Peter Weinberger și Brian Kernaghan.

Awk funcționează citind un fișier text sau flux de intrare o linie la un moment dat. Fiecare linie este scanată pentru a vedea dacă se potrivește cu un model predefinit. Dacă se găsește o potrivire, se realizează o acțiune.

Dar, în timp ce Sed și Awk pot împărtăși scopuri similare, ele sunt două limbi complet diferite, cu două filozofii de design complet diferite. Awk seamănă mai mult cu unele limbaje cu scop general Cum să alegeți un limbaj de programare pentru a învăța azi și obțineți un loc de muncă grozav în 2 aniPoate dura ani de muncă dedicați pentru a deveni un programator cu adevărat bun; deci există o modalitate de a alege limba potrivită pentru a începe de astăzi, pentru a fi angajat mâine? Citeste mai mult , cum ar fi C, Python și Bash. Are funcții asemănătoare și o abordare mai asemănătoare cu C a lucrurilor precum iterația și variabilele (James Bruce a explicat cum funcționează iterația Bazele absolute ale programării pentru începători (partea 2)În partea a 2-a a ghidului nostru pentru începători absolut în programare, voi acoperi elementele de bază ale funcțiilor, valorile de retur, buclele și condiționările. Asigurați-vă că ați citit prima parte înainte de a aborda acest lucru, unde am explicat ... Citeste mai mult ). Simplu, se simte mai mult ca un limbaj de programare.

Deci, să încercăm. Folosind versurile pentru Take On Me, vom imprima toate liniile care au mai mult de 20 de caractere.

lungime awk '($ 0)> 80' tom.txt awk-lungime

Următorul exemplu sunt cinic pătuț din documentația oficială Awk. Dar este un excelent exemplu al potențialului acestui limbaj puternic, dar minuscul. De asemenea, este o demonstrație excelentă a modului în care lucrurile precum iterația și variabilele funcționează în ea. Mai întâi, creați un fișier numit „WordCount.awk” și adăugați următoarele linii.

{pentru (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {pentru (cuvânt în freq) printf "% s \ t% d \ n", cuvânt, freq [cuvânt] }

Salvați-l, apoi rulați-l cu următoarea comandă.

awk -f WordCount.awk tom.txt

awk-wordcount
Misto, nu? Probabil că veți observa că nu sunt în niciun fel de ordine. Tu poate sa sortează rezultatele folosind utilitarul de sortare Unix. Dar vom lăsa asta pentru încă o zi. Vom păstra simplu.

Combinarea celor doi

Awk și Sed sunt ambele incredibil de puternice atunci când sunt combinate. Puteți face acest lucru folosind conducte Unix. Acestea sunt „|” biți între comenzi.

Să încercăm acest lucru: vom enumera toate liniile din Take On Me care au mai mult de 20 de caractere, folosind Awk. Apoi, vom dezbrăca toate liniile care încep cu "Lua". Împreună, totul arată astfel:

lungime awk '($ 0)> 20' tom.txt | sed / ^ Ia / d

Și produce acest lucru:

awk-lungime-sed

Acum să învârtim asta. Vom începe prin a elimina toate liniile care încep cu Take și apoi le vom conecta la Awk, unde vom conta de câte ori apare fiecare cuvânt. Arată cam așa:

pisica tom.txt | sed / ^ Take / d | awk -f WordCount.awk
awk-wordcount-sed

Puterea Sed și Awk

Puteți explica doar atât de multe într-un singur articol. Dar sper că am ilustrat cât de puternice sunt Sed și Awk. Mai simplu spus, sunt o centrală de procesare a textului.

Deci, de ce ar trebui să vă pese? Ei bine, pe lângă faptul că nu știți niciodată când trebuie să faceți modificări predictibile, repetitive la un document text, Sed și Awk sunt foarte bune pentru analizarea fișierelor jurnal. Acest lucru este deosebit de util atunci când încercați să depanați o problemă în serverul dvs. LAMP Înregistrat pentru gazduire web doar SSH? Nu vă faceți griji - Instalați cu ușurință orice software WebNu știți primul lucru despre operarea Linux prin puternica sa linie de comandă? Nu vă mai faceți griji. Citeste mai mult sau căutând jurnalele de acces pentru a vedea dacă serverul dvs. a fost piratat.

Ați găsit o utilizare interesantă pentru Sed și Awk? Există alte utilități Linux pe care le simți subapreciate? Anunță-mă în comentariile de mai jos și vom face chat.

Matthew Hughes este un dezvoltator de software și scriitor din Liverpool, Anglia. Foarte rar este găsit fără o ceașcă de cafea neagră puternică în mână și își adoră absolut Macbook Pro și camera foto. Îi poți citi blogul la http://www.matthewhughes.co.uk și urmăriți-l pe twitter la adresa @matthewhughes.