Come esempio finale, vengono descritti tre script, di complessità e velocità crescente, che implementano la stessa funzione di ‘cat -s’, cioè eliminare le righe vuote ripetute.
Il primo lascia una riga vuota all’inizio e una alla fine, se già sono presenti.
#!/usr/bin/sed -f
# sulle righe vuote, unisce con la successiva # Si noti l'asterisco nella regexp :x /^\n*$/ { N bx }
# ora comprime tutti i '\n', che può essere fatto anche con: # s/^\(\n\)*/\1/ s/\n*/\ /
Questo è un po’ più complesso e rimuove tutte le righe vuote all’inizio. Lascia una sola riga vuota alla fine se è già presente.
#!/usr/bin/sed -f
# cancella tutte le righe vuote iniziali 1,/^./{ /./!d }
# rimuove una riga vuota e tutte le righe vuote successive, # tranne una :x /./!{ N s/^\n$// tx }
Questo rimuove le righe vuote iniziali e finali. È anche il
più veloce. Si noti che i cicli sono realizzati interamente con
n
e b
, senza contare su sed
per far ripartire lo
script automaticamente alla fine di ogni riga.
#!/usr/bin/sed -nf
# cancellare tutte le righe (iniziali) vuote /./!d
# arrivato fin qui: quindi esiste almeno una linea non vuota :x # stamparla p # prendere la successiva n # ci sono caratteri? Stamparli, etc... /./bx
# no, non ci sono caratteri: è una riga vuota :z # prendere la successiva, se è l'ultima terminare qui per non # scrivere righe vuote finali n # vuota anche questa? Ignorare e andare alla prossima... # così rimuovendo TUTTE le righe vuote /./!bz
# a questo punto tutte le righe vuote sono state rimosse/ignorate. # Poiché si vuole ridurre le righe bianche ripetute a una sola, # si inserisce una riga vuota artificialmente i\
bx