Bir dosyadan boş satırlar nasıl çıkarılır (sekme ve boşluklar dahil)?


Yanıtlar:


26

Sadece grepboş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, nveya 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.


1
ayrıca bir $satır sonu için olmalı mı?
Michael Durrant,

@MichaelDurrant Her iki tarafta da demirli değil
jordanm

1
@MichaelDurrant. [^[:blank:]]$sadece boş olmayan biten satırlarla eşleşirdi. Her yerde
Stéphane Chazelas

@StephaneChazelas grep [: blank:] SOURCEFILE komutunu bile çalıştırdım. Anladığım kadarıyla [] karakter sınıfı için bana nasıl çalıştığı hakkında biraz fikir verebilir misiniz? snippet: blank: benim için yeni.
Jamshed Ansari user3000272 16:13

grep -E '\S'İşe yaramayacak durumlar var mı?
terdon

21

İşte bir awkçözüm:

$ awk NF file

İle awk, NFyalnızca boş olmayan satırlara ayarlanır. Bu koşul eşleştiğinde, satırın tamamını basacak olan awkvarsayılan eylem print.


Düzgün, bu da boşluklu satırları kaldırır.
wisbucky

7

Peki ya:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

veya

sed -e '/^[[:blank:]]*$/d' source_file > newfile

yani

Her satır için yerine:

  • başlarsa (" ^")
  • boşluk veya sekmeli (" [[:blank:]]") sıfır veya daha çok kez (" *")
  • ve sonra satırın sonu (" $")

Http://www.zytrax.com/tech/web/regex.htm#special adresinde :: blank :: ve diğer özel karakterler hakkında daha fazla bilgi bulabilirsiniz.


4
[[:space:]]sekmeleri içerir. Eğer olmasaydı, bir boşluk sekme izlerse regex başarısız olur.
jordanm

wctype(3)Ve isalpha(3)Elyordamsayfalarının karakter sınıfları maç olacak ne olduğunu açıklar.
jordanm

Soruya cevap vermeyen ilkini kaldırmak isteyebilirsiniz.
Stéphane Chazelas 16:13

@MichaelDurrant [[: blank:]] hakkında bir şeyler yazabilir misiniz?
Jamshed Ansari user3000272

[[: Blank ::]] için bilgi eklendi. Stephane, ilk iş neden olmasın? Sonunda hiç bir şey yapmadan çizginin yerini alacağını düşündüm.
Michael Durrant,

4

sedBoş satırları kaldırmak için komutu kullanabilirsiniz :

sed '/^$/d' in > out

Bu komut tüm boş satırları "in" dosyasından siler.


Özel olarak istendiği gibi, yalnızca boşluk ve sekme içeren satırları silmez.
dave_thompson_085 15:16

3

Görünüşe göre o kadar hızlı değil, sonunda komik bir tane buldum:

| xargs -L1


1
Güzel kısa olan, ancak daha fazlasını da yapar: önde gelen boşlukları ve sekmeleri de kaldırın.
jringoot

Ah, daha yetenekli olduğu bulundu? - Güzel! ;-P
poige

1
: Ve (1024 karakter de varsayılan) bakın Elyordamsayfalarının hatlarını keser linux.die.net/man/1/xargs
jringoot

Bu basit araca aşık
oluyorum


0

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:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.