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.