Boş alanları silmek için Sed


28

Bir metin dosyasındaki tüm boşlukları silmek için Sed'in nasıl kullanılacağını bilen var mı? Bunu yapmak için "d" delete komutunu kullanmaya çalıştım, ancak anlayamıyor gibi görünüyor.

Yanıtlar:


35

Ne tür bir "boşluk"?

"Tüm boşlukları silmek" farklı şeylerden biri anlamına gelebilir:

  1. boşluk karakterinin tüm oluşumlarını sil, kod 0x20.
  2. " \t" yatay sekme karakteri dahil tüm yatay alanı sil
  3. " \n" ve diğer satırlar dahil tüm boşlukları sil

İş için doğru araç

Eğer sedbazı gizli nedenle bir gereklilik daha iyi, iş için doğru aracı kullanın.

Komut tr, bir karakter listesini diğer karakterlerin listesine çevirmede (bu nedenle "tr" adıyla) ana kullanım alanına sahiptir. Bir köşe durumu olarak, boş karakter listesine çevrilebilir; Seçeneği -d( --delete) listede görünen karakterleri siler.

Karakter listesi, [:...:]sözdizimindeki karakter sınıflarından yararlanabilir .

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Israr ederken sed

Sed ile [:...:]karakter sınıfları için sözdizimi, regexp'lere karakter kümeleri için sözdizimi ile kombine edilmesi gerekmektedir [...]biraz kafa karıştırıcı sonuçlanan [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1, bir boşluk için POSIX gösterimi gitmek için uygun bir yoldur.
Avinash Raj

1
Bu görev için tr kullanmak için büyük ipucu, harika çalışıyor. Ayarlamam gereken tek şey, stdin'den girdi okumaktı, benim için işe yarayan şey buydu tr -d ' ' < input.txt > no-spaces.txt.
Sky

@ Sky'ın yorumu macOS'umda çalışıyor (Linux'ta test edilmedi). Belki de cevabı güncellenmeli?
iplus26

Çok teşekkürler @Sky, bu gerçekten kötü bir hata. trŞimdi üç çizgiyi düzelteceğim . (Başka bir yerde görüyor musunuz?)
Volker Siegel

7

Bunu, içindeki tüm boşlukları kaldırmak için kullanabilirsiniz file:

 sed -i "s/ //g" file

2
Nafile. Ben de benzer bir yaklaşım denedim. Çalışmaz
Justin

Beyaz alanları veya sekmeleri silmek istiyor musunuz?
Cyrus

1
boşlukları sil
Justin

2
Basit bir test:man sed | sed "s/ //g"
Cyrus

1
@starscream_disco_party: aynı. Her 3'ü /farklı bir karakterle değiştirebilirsiniz, örneğin:sed "ss ssg"
Cyrus
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.