bash: righe vuote, "invio a capo" e sostituzione live

prendo come riferimento il seguente file.txt che è composte da righe piene e vuote di questo tipo:
13227X 4004 4994XXX 13227X 4004XX 4994X 13227xxXXX 4004 499413227xXX
posso rimuovere le righe vuote con questo comando:
sed -e '/^$/d' file.txt
e ottengo:
XX13227 4004 x4994 13227 xXX4004 4994X X13227 X4004 499413227xXX 4004
ma posso anche rimuovere tutte le righe vuote e quelle che cominciano con "X"
sed -e '/^$/d' file.txt |sed -e '/^X/d'
e ottengo:
4004 x4994 13227 xXX4004 4994X 499413227xXX 4004
oppure posso rimuovere tutte le righe vuote e quelle che finiscono con "X"
sed -e '/^$/d' file.txt |sed -e '/X$/d'
e ottengo:
XX13227 4004 x4994 13227 xXX4004 X13227 X4004 4004
se invece voglio posso rimuovere tutte le righe vuote e quelle che finiscono con "X" ed infine rimuovere gli invii a capo e sostituirli con una virgola in modo che tutti i valori siano sulla stessa riga e separati da virgola
for line in $(sed -e '/^$/d' file.txt |sed -e '/X$/d'); do echo -n $line","; done
e ottengo:
XX13227,4004,x4994,13227,xXX4004,X13227,X4004,4004,
oppure in maniera più elegante
sed -e '/^$/d' file.txt |sed -e '/X$/d' | tr '\n' ', '
e ottengo comunque
XX13227,4004,x4994,13227,xXX4004,X13227,X4004,4004,
se poi voglio fare il "superfine" e rimuovere l'ultima virgola
sed -e '/^$/d' file.txt |sed -e '/X$/d' | tr '\n' ', ' | sed 's/\,$//g'
e ottengo:
XX13227,4004,x4994,13227,xXX4004,X13227,X4004,4004
-------------------------------------------
Sempre con sed si può fare un'altra bella cosa. Spesso negli howto si legge: "edita il file tale e sostituisci questo con questo". Sed offre qualcosa di meglio:
echo "ldap=192.168.01" > test sed -e "s/192.168.01/192.168.0.1/g" -i test cat test ldap=192.168.0.1
Riferimenti:
- blog di dam
- 2985 letture

Invia nuovo commento