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 grep
per 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
, n
o 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 sed
comando 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 :bufdo
comando 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?