GNU/Linux >> Linux Esercitazione >  >> Linux

Guida completa ai comandi di Sed [spiegata con esempi pratici]

In un articolo precedente, ho mostrato l'utilizzo di base di Sed, l'editor di streaming, in un caso d'uso pratico. Oggi, preparati a ottenere maggiori informazioni su Sed poiché faremo un tour approfondito del modello di esecuzione di sed.

Questa sarà anche l'occasione per fare una revisione esauriente di tutti i comandi Sed e per approfondire i loro dettagli e sottigliezze.

Quindi, se sei pronto, avvia un terminale, scarica i file di prova e siediti comodamente davanti alla tastiera:inizieremo subito la nostra esplorazione!

Un po' di teoria su Sed

Un primo sguardo al modello di esecuzione sed

Per capire veramente Sed devi prima capire il modello di esecuzione dello strumento.

Durante l'elaborazione dei dati, Sed legge una riga di input alla volta e la memorizza nel cosiddetto spazio pattern . Tutte le trasformazioni di Sed si applicano allo spazio del pattern. Le trasformazioni sono descritte da comandi di una lettera forniti sulla riga di comando o in un file di script Sed esterno. La maggior parte dei comandi Sed può essere preceduta da un indirizzo, o da un intervallo di indirizzi, per limitarne l'ambito.

Per impostazione predefinita, Sed stampa il contenuto dello spazio del modello alla fine di ogni ciclo di elaborazione, cioè appena prima di sovrascrivere lo spazio del modello con la riga di input successiva. Possiamo riassumere quel modello in questo modo:

  1. Prova a leggere la riga di input successiva nello spazio del modello

Se la lettura è andata a buon fine:

  1. Applica nell'ordine dello script tutti i comandi il cui indirizzo corrisponde alla riga di input corrente
  2. Se sed non è stato avviato in modalità silenziosa (-n ) stampa il contenuto dello spazio pattern (potenzialmente modificato)
  3. tornato a 1.

Poiché il contenuto dello spazio del modello viene perso dopo l'elaborazione di ciascuna riga, non è adatto per l'archiviazione a lungo termine. A tale scopo, Sed ha un secondo buffer, lo spazio di attesa . Sed non cancella, inserisce o ottiene mai dati dallo spazio di attesa a meno che non lo si richieda esplicitamente. Lo esamineremo più approfonditamente in seguito, studiando lo scambio, ottieni e mantieni i comandi.

La macchina astratta Sed

Il modello spiegato sopra è quello che vedrai descritto in molti tutorial Sed. In effetti, è abbastanza corretto capire i programmi Sed più elementari. Ma quando inizi a scavare in comandi più avanzati, vedrai che non è sufficiente. Cerchiamo quindi di essere un po' più formali ora.

In realtà, Sed può essere visto come l'implementazione di una macchina astratta il cui stato è definito da tre buffer, due registri e due flag:

  • tre buffer per memorizzare testo di lunghezza arbitraria. Sì:tre ! Nel modello di esecuzione di base abbiamo parlato di pattern e hold-space, ma Sed ha un terzo buffer:la append queue . Dal punto di vista dello script Sed, è un buffer di sola scrittura che Sed svuota automaticamente in momenti predefiniti della sua esecuzione (in generale prima di leggere una nuova riga dall'input o appena prima di uscire).
  • Sed mantiene anche due registri :il contatore di linea (LC) che contiene il numero di righe lette dall'ingresso e il contatore programma (PC) che mantengono sempre l'indice (“posizione” nello script) del prossimo comando da eseguire. Sed incrementa automaticamente il PC come parte del suo ciclo principale. Ma usando comandi specifici, uno script può anche modificare direttamente il PC per saltare o ripetere parti del programma. Questo è il modo in cui i loop o le istruzioni condizionali possono essere implementati con Sed. Maggiori informazioni nella sezione dedicata alle filiali di seguito.
  • Finalmente due flag può modificare il comportamento di alcuni comandi Sed:il flag di stampa automatica (AP) il flag di sostituzione (SF). Quando il flag di stampa automatica è impostato , Sed stamperà automaticamente il contenuto dello spazio pattern prima sovrascrivendolo (in particolare prima di leggere una nuova riga di input ma non solo). Quando il flag di stampa automatica è cancellato ("non impostato"), Sed non stamperà mai il contenuto dello spazio del modello senza un comando esplicito nello script. Puoi cancellare il flag di stampa automatica eseguendo Sed in "modalità silenziosa" (usando il -n opzione della riga di comando o utilizzando il commento speciale#n sulla prima riga o sullo script). Il "flag di sostituzione" è impostato dal comando di sostituzione (il s comando) quando sia l'indirizzo che il modello di ricerca corrispondono al contenuto dello spazio del modello. Il flag di sostituzione viene cancellato all'inizio di ogni nuovo ciclo, o quando viene letta una nuova riga dall'input, o dopo che è stata presa una diramazione condizionale. Anche in questo caso, rivisiteremo l'argomento in dettaglio nella sezione delle filiali.

Inoltre, Sed mantiene l'elenco dei comandi che sono entrati nel loro intervallo di indirizzi (più su quello della sezione degli indirizzi dell'intervallo) nonché un paio di handle di file per leggere e scrivere dati. Troverai ulteriori informazioni a riguardo nella descrizione del comando di lettura e scrittura.

Leggi la storia completa

Il resto dell'articolo è disponibile solo per i membri LHB Pro. Puoi iscriverti ora per $ 50 all'anno per leggere il resto di questo articolo e ottenere l'accesso GRATUITO a tutti i post, gli ebook e i video corsi riservati agli abbonati.

IscrivitiHai già un account?Accedi
Linux
  1. Ordina con l'ordinamento dalla riga di comando

  2. Manipolazione del testo da riga di comando con sed

  3. Multitasking alla riga di comando con screenie

  4. Utilizzo di più modelli contemporaneamente con il comando Sed

  5. Converti stringa in esadecimale sulla riga di comando

Come controllare la versione del sistema operativo con la riga di comando di Linux

I 50 esempi pratici del comando SED in Linux

Wait Command in Linux spiegato con esempi pratici

Come utilizzare il potente comando Xargs in Linux [spiegato con esempi]

Utilizzo del comando Linux sed con esempi

Tutorial Unix Sed:operazione su file multilinea con 6 esempi pratici