Il comando ‘sed’ permette di manipolare, filtrare, trasformare testi o flussi di testi; con flussi di testi intendo che può lavorare anche su dati che gli arrivano un po’ per volta. In modo predefinito elabora i file di testo riga per riga.

sed è tipico degli ambienti GNU/Linux e Unix in generale. Prerequisito di questa guida è la conoscenza almeno basilare delle espressioni regolari, se ancora non lo avete letto o non le conoscete leggetevi prima questo articolo. Un esempio semplice di utilizzo di sed lo trovate invece qui.

Questa introduzione è abbastanza completa ma non tratta ancora tutto perché le mie conoscenze di sed non sono ancora a livelli “guru” :).

Aggiornerò la guida quando avrò più conoscenze di sed! Potete comunque trovare già moltissime spiegazioni ed esempi adesso.

|| Versione guida: 1.1 ||

############

** in preparazione: script con sed, molto più potenti del semplice utilizzo a linea di comando **

10/12/2007 – v. 1.1

  • aggiunto il comando “transliterate”, per sostituire certi caratteri con altri, ai comandi spiegati ( y/prima/dopo/ )

############

(altro…)


Oggi vedremo come manipolare un testo, e in particolare un file di sottotitoli… utilizzerò questo punto di partenza per introdurvi a due potentissimi strumenti tipici del mondo GNU/Linux (e Unix più in generale).

L’idea iniziale era di scrivere un unico articolo che trattasse regex, sed e awk tutti assieme! L’articolo stava però diventando mastodontico! Quindi qui dentro vi linkero gli articoli che introducono regexp, sed e awk!

Al momento in cui scrivo l’articolo sulle regular expression e su sed sono finiti e saranno quindi già linkati! Sto ancora lavorando sull’articolo di awk (più lungo e complesso) che arriverà presto, impegni permettendo…

Qui vi proporrò un esempio pratico che funge da “antipasto” per le prossime guide: un file dei sottotitoli “srt” non conforme allo standard “srt”, e quindi con dei difetti da sistemare…

Questi difetti sono 2(+1):

  1. ad ogni riga del file ne segue una vuota che vogliamo eliminare (il che significa voler eliminare tutte le righe pari del file)
  2. il formato tempo non è corretto, manca una virgola tra i secondi e i millesimi di secondo! Vogliamo aggiungerla automaticamente
  3. risincroniziamo il file dei sottotitoli con il video: questo non è un problema di conformità allo standard srt ne un problema che ho risolto con sed o awk; l’ho aggiungo per completezza al fine di mostrare come risincronizzare un file di sottotitoli desincronizzato con l’audio…

Partiamo da un testo fatto così:

Testo di partenza

e ne vogliamo uno così:

Risultato

Ovviamente ha poco senso per file così corti: immaginate di avere un file con migliaia di righe da sistemare! A mano diventa improponibile… ecco dove entrano in scena awk e sed.

Per il punto uno useremo “awk”, per il punto due “sed” e per il punto 3 “gaupol” (uno dei software per manipolare i sottotitoli che potete trovare in Linux) anche se non ci siano particolari vincoli (avremmo potuto fare tutto sia con sed che con awk)

(altro…)