Sono un linguaggio per descrivere la “forma” o la “sintassi” di una stringa (una stringa è un testo qualunque, di qualunque lunghezza, una sequenza di caratteri). Con esso si possono effettuare ricerche, e quindi sostituzioni, molto complesse! Verificare che un testo sia conforme ad alcune caratteristiche e segue una certa sintassi (per esempio verificare se un testo è un indirizzo email o un url valido).

NOTA: talvolta le regex hanno piccole differenze tra un programma e l’altro o tra un linguaggio di programmazione ed un altro ma il loro concetto ed utilizzo resta lo stesso. Noi qui vedremo le regex con il comando ‘sed’.

Questo articolo sulle regexp fa parte di una serie di guide sul mio blog ed è un prerequisito per comprendere a fondo l’uso di sed e awk. Se invece volete un piccolo esempio di cosa si può fare con le regex date un occhiata a questo articolo.

L’articolo verrà aggiornato se le mie conoscenze sull’argomento migliorassero ma lo ritengo già abbastanza completo.

Ogni regex comincia e finisce con il carattere slash (/): così: /regex/. Se il testo contenuto tra i due slash è testo semplice verrà ricercata esattamente quella sequenza di caratteri (distinguendo tra maiuscole e minuscole) ma esistono alcuni caratteri particolari che se inseriti all’interno della regex hanno un significato diverso dal loro simbolo, ne vedremo solo alcuni:

(altro…)

Annunci

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…)