Annuncio pubblicitario

Due delle utility Linux più criminalmente sottovalutate sono Sed e Awk. Anche se, a dire il vero, possono sembrare un po 'arcani, se mai dovessi apportare modifiche ripetitive a grandi pezzi di codice o testo, o se dovessi mai analizzare del testo, Sed e Awk sono inestimabili.

Allora, cosa sono? Come vengono usati? E come, se combinati insieme, facilitano l'elaborazione del testo?

Cos'è Sed?

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

Il nome sta per editor di streame 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, semplice ma completo di Turing.

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 Sed che ha sostituito la parola "birra" con "soda", e poi ha passato un file di testo che conteneva l'intero testo di "99 Bottles of Beer on the Wall", passerebbe attraverso quel file riga per riga e stamperebbe "99 Bottles of Soda on the Wall", e così su.

instagram viewer

Lo script Sed più semplice è Hello World. Qui, utilizziamo l'utility Unix Echo, che si limita a produrre stringhe, per stampare "Hello World". Ma lo inoltriamo a Sed e gli diciamo di sostituire "Mondo" con "Dave". Cose autoesplicative.

echo "Hello World" | sed s / world / Dave
sedawk-dave

È inoltre possibile combinare le istruzioni Sed in file, se è necessario apportare modifiche più complicate. Ispirato da questo esilarante thread di Reddit, Porterò il testo di A-Ha Take On Mee sostituisci ogni istanza di "I", "Me" e "My", con Greg.

Per prima cosa, inserirò i testi della canzone in un file di testo chiamato tom.txt. Quindi aprirò il mio editor di testo preferito (il mio il preferito è Vim I 7 principali motivi per dare una chance all'editor di testi VimPer anni ho provato un editor di testo dopo l'altro. Lo chiami, l'ho provato. Ho usato ognuno di questi editori per oltre due mesi come il mio principale editore quotidiano. In qualche modo, io ... Leggi di più , ma nano nano vs. vim: Terminal Text Editors a confrontoSebbene Linux sia diventato abbastanza facile da poter essere utilizzato praticamente da chiunque senza dover mai usare il Terminale, ci sono alcuni di noi che lo usano regolarmente o sono curiosi di sapere come si può controllare ... Leggi di più e gedit gedit: uno dei redattori di testo semplice pieni di funzionalità [Linux e Windows]Quando pensi agli editor di testo semplice, la prima cosa che potrebbe capitarti è l'applicazione Blocco note di Windows. Fa esattamente ciò che afferma la sua descrizione del lavoro: funzionalità semplici per un testo semplice ... Leggi di più sono entrambe scelte eccellenti) e aggiungi le seguenti righe. Assicurati che il file che crei termina .SED.

sed-greg-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 supporta la 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 non capitalizzata.

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

Quindi, dobbiamo invocare il file. Per fare ciò, eseguiamo questo comando.

cat tom.txt | sed -f greg.sed

Rallentiamo e vediamo cosa fa. I lettori con gli occhi da aquila 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 la bandiera "-f". Questo gli dice di aprire lo script come file.

Il risultato finale è questo.

sed-greg-script

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

Ecco un esempio di come potrebbe funzionare. Prenderemo i testi delle canzoni di cui sopra, ma useremo regex per stampare ogni riga non lo fa iniziare con "Take".

cat tom.txt | sed / ^ Take / d
sed-regex-take

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

Che cos'è Awk?

awk, come Sed, è un linguaggio di programmazione progettato per gestire grandi quantità di testo. Ma mentre Sed viene utilizzato per elaborare e modificare il testo, Awk viene utilizzato principalmente come strumento per analisi e segnalazione.

Come Sed, Awk è stato sviluppato per la prima volta ai Bell Labs negli anni '70. Il suo nome non deriva 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 flusso di input una riga alla volta. Ogni riga 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 del design completamente diverse. Awk ricorda più da vicino alcuni lingue di uso generale Come scegliere un linguaggio di programmazione per imparare oggi e ottenere un ottimo lavoro in 2 anniPossono essere necessari anni di lavoro dedicato per diventare un programmatore veramente bravo; quindi c'è un modo per scegliere la lingua giusta da cui partire oggi, per farsi assumere domani? Leggi di più , come C, Python e Bash. Ha funzioni come funzioni e un approccio più simile a C a cose come iterazione e variabili (James Bruce spiegato come funziona l'iterazione Le basi assolute della programmazione per principianti (parte 2)Nella parte 2 della nostra guida assoluta alla programmazione per principianti, tratterò le basi di funzioni, valori di ritorno, loop e condizionali. Assicurati di aver letto la parte 1 prima di affrontare questo, dove ho spiegato il ... Leggi di più ). In parole povere, sembra più un linguaggio di programmazione.

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

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

Il prossimo esempio che ho spudoratamente paralizzato da la documentazione ufficiale di Awk. Ma è un ottimo esempio delle potenzialità di questo linguaggio potente ma allo stesso tempo minuscolo. È anche un'ottima dimostrazione di come cose come l'iterazione e le variabili vi lavorano. Innanzitutto, crea un file chiamato "WordCount.awk" e aggiungi le seguenti righe.

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

Salvalo e quindi eseguilo con il seguente comando.

awk -f WordCount.awk tom.txt

awk-wordcount
Bene, vero? Probabilmente noterai che non sono in alcun tipo di ordine. voi può ordinare i risultati usando l'utilità di ordinamento Unix. Ma lo lasceremo per un altro giorno. Lo renderemo semplice.

Combinare i due

Awk e Sed sono entrambi incredibilmente potenti se combinati. Puoi farlo usando le pipe Unix. Quelli sono i "|" bit tra i comandi.

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

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

E produce questo:

awk-lunghezza-sed

Ora capovolgetelo. Inizieremo rimuovendo tutte le righe che iniziano con Take, quindi reindirizzandole a Awk, dove conteremo quante volte appare ogni parola. Sembra un po 'così:

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

Il potere di Sed e Awk

C'è solo così tanto che puoi spiegare in un singolo articolo. Ma spero di aver illustrato quanto siano incredibilmente potenti Sed e Awk. In poche parole, sono una potenza di elaborazione del testo.

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 perfetti per l'analisi dei file di registro. Ciò è particolarmente utile quando si tenta di eseguire il debug di un problema nel tuo server LAMP Registrato per l'hosting Web solo SSH? Non preoccuparti: installa facilmente qualsiasi software WebNon conosci la prima cosa sull'uso di Linux attraverso la sua potente riga di comando? Non preoccuparti più. Leggi di più o guardando i log di accesso per vedere se il tuo server è stato violato.

Hai trovato un uso interessante per Sed e Awk? Ci sono altre utility Linux che ritieni siano sottovalutate? Fammi sapere nei commenti qui sotto e chatteremo.

Matthew Hughes è uno sviluppatore e scrittore di software di Liverpool, in Inghilterra. Raramente si trova senza una tazza di caffè nero forte in mano e adora assolutamente il suo Macbook Pro e la sua macchina fotografica. Puoi leggere il suo blog all'indirizzo http://www.matthewhughes.co.uk e seguilo su Twitter su @matthewhughes.