Ogni geek di Linux ha bisogno di conoscere Sed e Awk. Ecco perché…

Ogni geek di Linux ha bisogno di conoscere Sed e Awk. Ecco perché… / Linux

Due delle utility Linux meno apprezzate sotto il profilo criminale sono Sed e Awk. Anche se possono sembrare un po 'arcani, se mai dovessi apportare modifiche ripetitive a pezzi di codice o testo, o se dovessi mai analizzare del testo, Sed e Awk sono inestimabili.

Quindi, cosa sono? Come vengono utilizzati? E come, combinati insieme, rendono più semplice l'elaborazione del testo?

Cos'è Sed?

Sed è stato sviluppato nel 1971 da Bell Labs, dal leggendario pioniere dell'informatica Lee E. McMahon.

Il nome sta per editor di stream, e questo è un po 'quello che fa. Ti permette di modificare corpi o flussi di testo a livello di codice, attraverso un linguaggio di programmazione compatto e semplice, ma ancora completo.

Il modo in cui funziona è semplice: legge il testo, riga per riga in un buffer. Per ogni riga, eseguirà le istruzioni predefinite, ove applicabile.

Ad esempio, se qualcuno dovesse scrivere una sceneggiatura di Sed che ha sostituito la parola “birra” con “Soda”, e poi passato in un file di testo che conteneva l'intero testo “99 bottiglie di birra sul muro”, passerebbe attraverso quel file riga per riga e stamperà “99 bottiglie di soda sul muro”, e così via.

La sceneggiatura di base di Sed è una Hello World. Qui, usiamo l'utility Unix Echo, che emette semplicemente stringhe, per stampare “Ciao mondo”. Ma lo colleghiamo a Sed, e lo diciamo a sostituire “Mondo” con”Dave”. Roba auto-esplicativa.

echo "Hello World" | sed s / world / Dave

È anche possibile combinare le istruzioni di Sed in file, se è necessario apportare modifiche più complicate. Ispirato da questo esilarante thread di Reddit, prenderò i testi di A-Ha Take On Me, e sostituisci ogni istanza di “io”, “Me”, e “Mio”, con Greg.

Innanzitutto, inserirò i testi nella canzone in un file di testo chiamato tom.txt. Quindi aprirò il mio editor di testo preferito (il mio preferito è Vim I 7 principali motivi per dare a Vim Text Editor un'occasione I 7 principali motivi per dare a Vim Text Editor un'occasione Per anni ho provato un editor di testo dopo un altro, tu lo chiami, l'ho provato, ho usato ognuno di questi editor per oltre due mesi come il mio principale editor quotidiano ... In qualche modo, io ... Read More, ma Nano nano vs. vim: Terminal Text Editors Confronto tra nano e vim: Terminali Editor di testo a confronto Sebbene Linux sia diventato abbastanza facile da essere usato praticamente da chiunque senza dover utilizzare il terminale, alcuni di noi lo usano regolarmente o sono curiosi di sapere come si può controllare ... Continua a leggere Gedit gedit: uno degli editor di testo normale pieni di funzionalità [Linux e Windows] gedit: uno degli editor di testo normale pieni di funzionalità [Linux e Windows] Quando si pensa a editor di testo semplice, la prima cosa che potrebbe apparire la tua testa è l'applicazione Blocco note di Windows. Fa esattamente quello che è stati di descrizione del lavoro: semplici funzioni per un testo semplice ... Ulteriori informazioni sono entrambe scelte eccellenti) e aggiungere le seguenti righe. Assicurati che il file che crei termini con .sed.

Potresti notare che nell'esempio sopra, mi sono ripetuto (ad es. S / me / Greg / e s / Me / Greg /). Questo perché alcune versioni di Sed, come quella fornita con Mac OS X, lo fanno non supporto corrispondenza senza distinzione tra maiuscole e minuscole. Di conseguenza, dobbiamo scrivere due istruzioni Sed per ogni parola, in modo che riconosca la versione maiuscola e maiuscola.

Questo non funzionerà perfettamente, come se avessi sostituito ogni istanza di “io”, “Me”, e “Mio” a mano. Ricorda, stiamo solo usando questo come esercizio per dimostrare come puoi raggruppare le istruzioni di Sed in uno script e poi eseguirle con un singolo comando.

Quindi, dobbiamo richiamare il file. Per farlo, eseguiamo questo comando.

cat tom.txt | sed -f greg.sed

Rallentiamoci e guardiamo cosa fa. I lettori con gli occhi aquilani avranno notato che siamo non usando Echo qui. Stiamo usando Cat. Questo perché mentre Cat stamperà l'intero contenuto del file, echo stamperà solo il nome del file. Avrai anche notato che stiamo eseguendo Sed con il “-f” bandiera. Questo gli dice di aprire lo script come un file.

Il risultato finale è questo.

Vale anche la pena notare che Sed supporta le espressioni regolari (REGEX). Questi ti permettono di definire pattern nel testo, usando una sintassi speciale e complicata.

Ecco un esempio di come potrebbe funzionare. Prenderemo i testi delle canzoni sopra citati, ma usiamo regex per stampare ogni riga non lo fa iniziare con “Prendere”.

cat tom.txt | sed / ^ Take / d

Sed è, ovviamente, incredibilmente utile. Ma è ancora più potente se combinato con Awk.

Che cosa è Awk?

Awk, come Sed, è un linguaggio di programmazione progettato per gestire grandi volumi di testo. Ma mentre Sed è usato per elaborare e modificare il testo, Awk è principalmente usato come strumento per analisi e segnalazione.

Come Sed, Awk fu sviluppato nei Bell Labs negli anni '70. Il suo nome non viene da ciò che il programma fa, ma piuttosto i cognomi di ciascuno degli autori: Alfred Aho, Peter Weinberger e Brian Kernaghan.

Awk funziona leggendo un file di testo o immettendo in streaming una riga alla volta. Ogni linea viene scansionata per vedere se corrisponde a un modello predefinito. Se viene trovata una corrispondenza, viene eseguita un'azione.

Ma mentre Sed e Awk possono condividere scopi simili, sono due lingue completamente diverse, con due filosofie di design completamente diverse. Awk assomiglia più strettamente ad alcuni linguaggi di uso generale Come scegliere un linguaggio di programmazione per imparare oggi e ottenere un ottimo lavoro in 2 anni Come scegliere un linguaggio di programmazione per imparare oggi e ottenere un ottimo lavoro in 2 anni Ci possono volere anni di lavoro dedicato per diventare un vero programmatore; quindi c'è un modo per scegliere la lingua giusta per iniziare da oggi, al fine di ottenere assunti domani? Leggi di più, come C, Python e Bash. Ha cose come le funzioni e un approccio più simile a C a cose come iterazione e variabili (James Bruce ha spiegato come funziona l'iterazione Le basi assolute della programmazione per principianti (parte 2) Le basi assolute della programmazione per principianti (parte 2) In parte 2 della nostra guida assoluta ai principianti per la programmazione, parlerò delle basi delle funzioni, dei valori di ritorno, dei loop e dei condizionali. Assicurati di aver letto la parte 1 prima di affrontare questo, dove ho spiegato il ... Read More). In parole povere, sembra più un linguaggio di programmazione.

Quindi proviamolo. Usando il testo di Take On Me, stamperemo tutte le righe che superano i 20 caratteri.

awk 'length ($ 0)> 80' tom.txt 

Il prossimo esempio che ho spudoratamente criptato dalla documentazione ufficiale di Awk. Ma è un grande esempio del potenziale di questo linguaggio potente ma minuscolo. È anche una grande dimostrazione di come funzionano le cose come l'iterazione e le variabili. Per prima cosa, crea un file chiamato “WordCount.awk”, e aggiungi le seguenti linee.

per (i = 1; i <= NF; i++) freq[$i]++ 
END per (word in freq) printf "% s \ t% d \ n", word, freq [word]

Salvalo, quindi eseguilo con il seguente comando.

awk -f WordCount.awk tom.txt


Fantastico, giusto? Probabilmente noterai che non sono in alcun tipo di ordine. tu può ordina i risultati usando l'utility di ordinamento Unix. Ma lo lasceremo per un altro giorno. Lo manterremo semplice.

Combinare i due

Awk e Sed sono entrambi incredibilmente potenti quando combinati. Puoi farlo usando pipe Unix. Quelli sono i “|” bit tra i comandi.

Proviamo questo: elencheremo tutte le linee in Take On Me che hanno più di 20 caratteri, usando Awk. Quindi, elimineremo tutte le righe che iniziano con “Prendere”. Insieme, sembra tutto questo:

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

E produce questo:

Ora giriamo intorno. Inizieremo rimuovendo tutte le linee che iniziano con Take e poi le canalizziamo su Awk, dove conteremo quante volte ogni parola appare. Sembra un po 'come questo:

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

Il potere di Sed e Awk

C'è solo così tanto che puoi spiegare in un singolo articolo. Ma spero di aver illustrato quanto siano straordinariamente potenti Sed e Awk. In poche parole, sono una centrale elettrica per l'elaborazione di testi.

Quindi, perché dovrebbe interessarti? Bene, oltre al fatto che non si sa mai quando è necessario apportare modifiche prevedibili e ripetitive a un documento di testo, Sed e Awk sono ottimi per l'analisi dei file di registro. Ciò è particolarmente utile quando stai provando a eseguire il debug di un problema nel tuo server LAMP Firmato per l'hosting Web SSH-only? Non preoccuparti - Installa facilmente qualsiasi software Web firmato per l'hosting Web SSH-only? Non preoccuparti: installa facilmente qualsiasi software Web. Non conosci la prima cosa che riguarda l'utilizzo di Linux attraverso la sua potente linea di comando? Non preoccuparti più. Leggi altro, o guarda i tuoi log di accesso per vedere se il tuo server è stato violato.

Hai trovato un uso interessante per Sed e Awk? Ci sono altre utilità di Linux che ritieni siano poco apprezzate? Fatemi sapere nei commenti qui sotto, e faremo chat.

Scopri di più su: Terminal, Text Editor.