İlk boşluktan sonra herhangi bir şeyi kaldırmak için sed / awk kullanma


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Sed / awk / replace komutunu kullanarak yukarıdaki metinde her satırdaki ilk boşluktan sonra gelen her şeyi kaldırmak istiyorum. Örneğin çıktı:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

herhangi bir yardım takdir edilecektir.

Yanıtlar:


35

sed

sed 's/\s.*$//'

grep

grep -o '^\S*'

awk

awk '{print $1}'

Yorumlarda belirtildiği gibi -oPOSIX değil; ancak hem GNU hem de BSD'ye sahiptir, bu yüzden çoğu insan için çalışmalıdır.

Ayrıca, \s/ \Ssenin tanımıyor eğer bir hazır alanı kullanabilir veya alan ve sekme, parantez ifadelerinde (olanlar isterseniz yapabilirsiniz, tüm sistemlerde olmayabilir [...]) veya [[:blank:]]açık konuşmak gerekirse bu karakter sınıfını (not \solduğunu [[:space:]]muhtemelen umursamadığınız CR, LF veya VT gibi dikey boşluk karakterlerine eşdeğerdir ve bunları içerir).

Birincisi awk , satırların boş bir karakterle başlamadığını varsayar.


14
cut -d ' ' -f 1 < your-file

en verimli olurdu.


4
Bunu birkaç cevabınızda fark ettim ve bunun bir nedeni olup olmadığını merak ediyordum: komut onsuz çalışabilse bile her zaman giriş yeniden yönlendirmesi eklediğiniz görünüyor. <Burada neden faydalı olduğunu açıklayabilir misiniz ?
Joseph R.

5
@JosephR. Yani cut < filevs cut file? Daha sonra bkz. Unix.stackexchange.com/a/70759/22565
Stéphane Chazelas

kesim bu kadar basit problemler için en iyi çözüm olabilir. Ben awk (veya perl) daha karmaşık eşleştirme için rezerv.
ChuckCottrill

@StephaneChazelas (Karakteristik) içgörü için teşekkürler :)
Joseph R.


1

Ve birincisi perl,

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

GNU grep sayesinde,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
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.