2013-03-15 16 views
12

Çok sayıda satır içeren bir dosyam var ve Linux komutlarıyla her satırın yalnızca ilk sözcüğünü görüntülemek istiyorum.Dosyamdaki linux komutlarını kullanarak her satırın ilk kelimesini nasıl görüntüleyebilirim?

Bunu nasıl yapabilirim?

+0

[bir dizede Baskı yalnızca ilk alan] olası yinelenen (http://stackoverflow.com/questions/15024561/printing-only-the-first-field-in-a-string) –

+5

Milyonlarca kez, milyonlarca kez yapılabilir. Bir dahaki sefere aramayı dene. Kapatmak için oylama. –

+3

Eminim yinelenenler var, ama önerilenin iyi bir eşleşme olduğunu düşünmüyorum. –

cevap

23

Dene: Ben cevaplar zaten var bakın

grep -Eo '^[^ ]+' file 
+1

Çalıştığınız için teşekkürler – MOHAMED

25

Sen awk kullanabilirsiniz:

awk '{print $1}' your_file 

Bu işlem "baskı" your_file ilk sütun ($1). kullanarak bunu

+0

post düzenlenmiş, neden aynı anda iyi olanı verdiğinizde yanlış bir çözüm veriyorsunuz? Bu işe yaramaz bir kediydi: http://partmaps.org/era/unix/award.html#cat –

+0

Sorusunda “kedi” yi belirtti; en azından piped-komutta nasıl kullanacağımı göstereyim diye düşündüm (ama bunun için çok fazla olduğunu söylemiştim = P). – newfurniturey

3

. Ama aynı zamanda sed ile bunu yapabilirsiniz:

sed 's/ .*//' fileName 
6

coreutils cut ile bunu deneyin:

cut -d' ' -f1 file 
1

yukarıdaki çözümleri, özel durumda uygun görünüyor. Sorunuzun daha genel bir uygulaması için, kelimelerin genel olarak boşlukla ayrılmış olarak tanımlandığına, ancak özellikle boşluk karakterleri olmayacağına dikkat edin. Dosyanızdaki sütunlar sekmeyle ayrılmış olabilir, hatta sekmelerden ve boşluklardan oluşan bir karışımla ayrılabilir.

Önceki örneklerin tümü, boşlukla ayrılmış sözcükleri bulmak için kullanışlıdır, ancak yalnızca awk örneği, diğer boşluk karakterleri tarafından ayrılan sözcükleri de bulur (ve aslında, bu, çeşitli sed/grep sürümlerinde düzgün bir şekilde yapmak için oldukça zor hale gelir.). Ayrıca, açıkça böylece awk ifadeyi değiştirerek, boş satırları atlamak isteyebilirsiniz: Ayrıca boşluk ile başlayacak boş alanlar, yani hatları olasılığı hakkında endişeleriniz varsa

awk '{if ($1 !="") print $1}' your_file 

, daha sonra Daha sağlam bir çözüm sırayla olurdu. Böyle durumlar için tek astar üretmek için yeterli usta Awk değilim, ama hile gibi görünebilir yapar kısa Python komut:

>>> import re 
>>> for line in open('your_file'): 
...  words = re.split(r'\s', line) 
...  if words and words[0]: 
...   print words[0] 
+0

Aslında perl regex, _grep_ içinde yaygın olarak bulunur ve '' s, kurtarma için uygun bir şekilde gelir: 'grep -Po '^ \ s * \ K \ S +'…' – bobbogo

0

... veya Windows (üzerinde size GnuWin32 grep varsa):

grep -Eo "^[^ ]+" file 
İlgili konular