Saya ingin menghapus semua baris kosong dari file. Bahkan jika garis tersebut mengandung spasi atau tab, itu juga harus dihapus.
Saya ingin menghapus semua baris kosong dari file. Bahkan jika garis tersebut mengandung spasi atau tab, itu juga harus dihapus.
Jawaban:
Hanya grepuntuk yang tidak kosong:
grep '[^[:blank:]]' < file.in > file.out
[:blank:], rentang karakter di dalam ( [...]), disebut kelas karakter POSIX. Ada beberapa seperti [:alpha:], [:digit:]... yang [:blank:]cocok dengan spasi putih horizontal (di lokal POSIX, itu adalah ruang dan tab, tetapi di lokal lain mungkin ada lebih banyak, seperti semua karakter jarak horizontal Unicode di lokal UTF8) sementara [[:space:]]mencocokkan putih horizontal dan vertikal. karakter spasi (sama seperti [:blank:]plus hal-hal seperti tab vertikal, umpan form ...).
grep '[:blank:]'
Akan mengembalikan baris yang berisi salah satu karakter, :, b, l, a, natau k. Kelas karakter hanya dikenali di dalam [...], dan di ^dalam [...]meniadakan set. Jadi [^[:blank:]]berarti setiap karakter kecuali yang kosong.
[^[:blank:]]$hanya akan cocok dengan garis yang berakhir dengan non-kosong. Kami ingin garis yang berisi non-kosong di mana saja
grep -E '\S'tidak akan berfungsi?
Bagaimana tentang:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
atau
sed -e '/^[[:blank:]]*$/d' source_file > newfile
yaitu
Untuk setiap baris, gantikan:
^")[[:blank:]]") nol atau lebih banyak kali (" *")$")Info lebih lanjut tentang :: blank :: dan karakter khusus lainnya di http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]termasuk tab. Jika tidak, regex Anda akan gagal jika spasi mengikuti tab.
wctype(3)dan isalpha(3)manual menggambarkan apa yang akan cocok dengan kelas karakter.
Anda dapat menggunakan sedperintah untuk menghapus baris kosong:
sed '/^$/d' in > out
Perintah ini menghapus semua baris kosong dari file "in"
Sepertinya saya sudah menemukan yang tidak secepat itu, tapi lucu akhirnya:
| xargs -L1
Coba ex -way:
ex -s +'v/\S/d' -cwq test.txt
Untuk banyak file (edit di tempat):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Catatan: :bufdoPerintah ini bukan POSIX .
Tanpa memodifikasi file (cukup cetak pada output standar):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Gunakan perintah berikut:
grep '\S' FILE
yang menghapus semua baris termasuk spasi atau tab.
Jika tidak, penghapusan tidak termasuk garis dengan spasi / tab, gunakan:
grep . FILE
Sebagai contoh:
$ 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
Lihat juga:
sed: Hapus baris kosong menggunakan sedawk: Hapus garis kosong menggunakan awk
$akhir?