Voglio rimuovere tutte le righe vuote da un file. Anche se la linea contiene spazi o schede, dovrebbe essere rimossa.
Voglio rimuovere tutte le righe vuote da un file. Anche se la linea contiene spazi o schede, dovrebbe essere rimossa.
Risposte:
Solo grepper i non-spazi:
grep '[^[:blank:]]' < file.in > file.out
[:blank:], all'interno degli intervalli di caratteri ( [...]), viene chiamata classe di caratteri POSIX. Ci sono alcuni tipi [:alpha:], [:digit:]... [:blank:]corrisponde a uno spazio bianco orizzontale (nella locale POSIX, che è spazio e scheda, ma in altre versioni locali potrebbero essercene altri, come tutti i caratteri di spaziatura orizzontale Unicode in locali UTF8) mentre [[:space:]]corrisponde a bianco orizzontale e verticale caratteri di spazio (uguale a [:blank:]più cose come la scheda verticale, il feed del modulo ...).
grep '[:blank:]'
Restituirebbe le righe che contengono uno qualsiasi dei personaggi, :, b, l, a, no k. Le classi di caratteri sono riconosciute solo all'interno [...]e ^all'interno [...]del set nega. Quindi [^[:blank:]]significa qualsiasi personaggio tranne quelli vuoti.
[^[:blank:]]$corrisponderebbe solo alle righe che terminano in un non vuoto. Vogliamo linee che contengano un non-vuoto ovunque
grep -E '\S'non funzionerebbe?
Che ne dite di:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
o
sed -e '/^[[:blank:]]*$/d' source_file > newfile
vale a dire
Per ogni riga, sostituire:
^")[[:blank:]]") zero o più volte (" *")$")Maggiori informazioni su :: blank :: e altri caratteri speciali su http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]include schede. Altrimenti la tua regex fallirebbe se uno spazio seguisse una scheda.
wctype(3)e isalpha(3)descrivono ciò che corrisponderà alle classi di personaggi.
È possibile utilizzare il sedcomando per rimuovere le righe vuote:
sed '/^$/d' in > out
Questo comando cancella tutte le righe vuote dal file "in"
Sembra di averne trovato uno non così veloce, ma finalmente divertente:
| xargs -L1
Prova ex -way:
ex -s +'v/\S/d' -cwq test.txt
Per più file (modifica sul posto):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Nota: il :bufdocomando non è POSIX .
Senza modificare il file (basta stampare sull'output standard):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Utilizzare il comando seguente:
grep '\S' FILE
che rimuove tutte le linee inclusi spazi o tabulazioni.
Altrimenti, la rimozione, escluse le linee con spazi / tabulazioni, usa:
grep . FILE
Per esempio:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Guarda anche:
sed: Elimina le righe vuote usando sedawk: rimuovi le righe vuote usando awk
$fine linea?