Bir dosyadaki tüm boş satırları kaldırmak istiyorum. Satır boşluklar veya sekmeler içeriyor olsa bile, kaldırılması da gerekir.
Bir dosyadaki tüm boş satırları kaldırmak istiyorum. Satır boşluklar veya sekmeler içeriyor olsa bile, kaldırılması da gerekir.
Yanıtlar:
Sadece grep
boşluk bırakmayanlar için:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
karakter aralığı içinde ( [...]
), POSIX karakter sınıfı denir. Orada gibi birkaç [:alpha:]
, [:digit:]
... [:blank:]
(POSIX yerel ayarda, UTF8 yerel ayarlarda Unicode yatay aralık karakterleri uzay ve sekme, ama, diğer yerlerdeki tüm gibi daha olabilir) yatay boşluk eşleştirmesidir [[:space:]]
maçları yatay ve dikey beyaz boşluk karakterleri ( [:blank:]
artı dikey sekme, form feed gibi şeyler gibi).
grep '[:blank:]'
Karakterlerden birini içeren satırları iade ediyorum, :
, b
, l
, a
, n
veya k
. Karakter sınıfları yalnızca içinde tanınan [...]
ve ^
içinde [...]
set ortadan kaldırır. Yani [^[:blank:]]
boş olanlardan başka herhangi bir karakter demektir.
[^[:blank:]]$
sadece boş olmayan biten satırlarla eşleşirdi. Her yerde
grep -E '\S'
İşe yaramayacak durumlar var mı?
Peki ya:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
veya
sed -e '/^[[:blank:]]*$/d' source_file > newfile
yani
Her satır için yerine:
^
")[[:blank:]]
") sıfır veya daha çok kez (" *
")$
")Http://www.zytrax.com/tech/web/regex.htm#special adresinde :: blank :: ve diğer özel karakterler hakkında daha fazla bilgi bulabilirsiniz.
[[:space:]]
sekmeleri içerir. Eğer olmasaydı, bir boşluk sekme izlerse regex başarısız olur.
wctype(3)
Ve isalpha(3)
Elyordamsayfalarının karakter sınıfları maç olacak ne olduğunu açıklar.
sed
Boş satırları kaldırmak için komutu kullanabilirsiniz :
sed '/^$/d' in > out
Bu komut tüm boş satırları "in" dosyasından siler.
Görünüşe göre o kadar hızlı değil, sonunda komik bir tane buldum:
| xargs -L1
Eski yolu deneyin :
ex -s +'v/\S/d' -cwq test.txt
Birden fazla dosya için (yerinde düzenleme):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Not: :bufdo
Komut POSIX değil .
Dosyayı değiştirmeden (sadece standart çıktıya yazdırın):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Aşağıdaki komutu kullanın:
grep '\S' FILE
boşluk veya sekme dahil olmak üzere tüm satırları kaldırır.
Aksi halde, boşlukları / sekmeleri olan satırları içermeyen kaldırma, kullanın:
grep . FILE
Örneğin:
$ 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
Ayrıca bakınız:
sed
: sed kullanarak boş satırları silinawk
: awk kullanarak boş satırları kaldır
$
satır sonu için olmalı mı?