2013-03-15 5 views
12

Ich habe eine Datei mit vielen Zeilen, und ich möchte nur das erste Wort jeder Zeile mit den Linux-Befehlen anzeigen.Wie wird das erste Wort jeder Zeile in meiner Datei mit den Linux-Befehlen angezeigt?

Wie kann ich das tun?

+0

möglich Duplikat [nur Druck des ersten Feld in einem String] (http://stackoverflow.com/questions/15024561/printing-only-the-first-field-in-a-string) –

+5

Es wurde eine Million Mal gefragt, kann eine Million Wege getan werden. Versuchen Sie es beim nächsten Mal. Abstimmung zum Schließen. –

+3

Ich bin mir sicher, dass es Dubletten gibt, aber ich denke nicht, dass der vorgeschlagene eine gute Übereinstimmung ist. –

Antwort

23

Versuchen Sie, diese mit tun:

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

danke es funktioniert – MOHAMED

25

Sie können awk verwenden:

awk '{print $1}' your_file 

Dies wird "Druck" die erste Spalte ($1) in your_file.

+0

Beitrag bearbeitet, warum falsche Lösung geben, wenn Sie den guten gleichzeitig geben? Es war ein nutzloser Gebrauch der Katze: http://partmaps.org/era/unix/award.html#cat –

+0

Er spezifizierte 'Katze' in seiner Frage; Ich dachte mir, ich würde zumindest zeigen, wie man es in einem Pipe-Befehl benutzt (aber ich habe erwähnt, dass es zu diesem Zweck zu viel ist = P). – newfurniturey

3

ich sehen, gibt es bereits Antworten. Sie können aber auch mit sed dies tun:

sed 's/ .*//' fileName 
6

versuchen, dies zu tun mit coreutils cut:

cut -d' ' -f1 file 
1

Die oben genannten Lösungen scheinen Ihren speziellen Fall zu passen. Denken Sie bei einer allgemeineren Anwendung Ihrer Frage daran, dass Wörter im Allgemeinen als durch Leerzeichen getrennt definiert werden, aber nicht unbedingt als Sonderzeichen. Spalten in Ihrer Datei können z. B. tabulatorgetrennt sein oder sogar durch eine Mischung aus Tabstopps und Leerzeichen getrennt sein. Die vorherigen Beispiele sind alle nützlich, um durch Leerzeichen getrennte Wörter zu finden, während nur das awk-Beispiel auch Wörter findet, die durch andere Leerzeichen getrennt sind (und tatsächlich erweist sich dies als ziemlich schwierig, in verschiedenen sed/grep-Versionen einheitlich zu sein)). Sie können auch explizit leere Zeilen überspringen wollen, um so die awk-Anweisung zur Änderung:

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

Wenn Sie auch besorgt über die Möglichkeit, leere Felder sind, dh Linien, die mit Leerzeichen beginnen , dann ein robustere Lösung wäre in Ordnung. Ich bin nicht geschickt genug, um mit awk einen Einzeiler für solche Fälle zu produzieren, aber ein kurzen Python-Skript, das der Trick könnte wie folgt aussehen:

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

Eigentlich Perl Regex ist weit verbreitet in _grep_, und '\ s' kommt bequem zur Rettung:' grep -Po '^ \ s * \ K \ S +' ... ' – bobbogo

0

... oder auf Windows (wenn Sie GnuWin32 grep):

grep -Eo "^[^ ]+" file 
Verwandte Themen