Comprimere un file multilinea in una sola riga usando sed

Questo lo tengo come promemoria personale. Ultimamente ho rifatto qualche bookmarklet, qualcuno pubblicato, altri forse quando saranno rifiniti, in ogni caso una delle cose più noiose da fare era comprimere il codice JS in una sola riga.

Per effettuare i test e il debug del codice, infatti, non lavoravo sul bookmarklet ma su un file JS tenuto in localost e iniettato nella pagina, questo per semplificare le modifiche al codice stesso.

Una cosa che con le funzioni di search & replace del mio editor di testo (Crimson Editor) non riuscivo proprio a fare era quella di comprimere il file JS in una sola riga (e la modalità Word Wrap non era di mio gradimento) di codice così da poterlo usare come bookmarklet. Cercando un po’ con Google sono riuscito a trovare un metodo per eliminare gli a capo nel file, modificandolo un pochino sono alla fine riuscito a rimuovere anche spazi ed eventuali tabulazioni.

Questo è il codice che comprime un file in un’unica riga

sed -e :a -e N -e "{s/\n/ /;s/  */ /g}" -e ta input > output

Piccola spiegazion

Questa una piccola spiegazione su come opera il comando:

:a  #  legge la riga e inserisce un'etichetta per ritornarci
N  # legge la riga successiva e la mette nel buffer
s/\n/ /;s/  */ /g}   
# sostituisce il carattere "a capo" e tutti gli spazi con uno spazio singolo
(inaspettato: sostituisce anche le tabulazioni)
EDIT: Assolutamente falso :-P . Ero io che avevo impostato un'opzione strana in Crimson Editor "Replace tabs with spaces", me ne sono accorto solamente perchè  usando Python questo mi generava una marea di errori.

:ta  #  torna alla riga precedentemente etichettata

Questo è il codice per rimuovere oltre agli spazi anche i caratteri di tabulazione:

sed -e :a -e N -e "{s/\n/ /;s/\s\s*/ /g}" -e ta input > output

Naturalmente, è sconsigliato usare questo metodo con file di grosse dimensioni visto che il buffer potrebbe diventare eccessivamente grande.

Fonte: Merging lines in a file using sed

Technorati Tags: , ,

0 Responses to “Comprimere un file multilinea in una sola riga usando sed”


  • No Comments

Leave a Reply