it-swarm.com.de

Verwenden Sie sed / awk, um alles nach dem ersten Leerzeichen zu entfernen

aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Mit sed/awk/replace möchte ich im obigen Text alles entfernen, was nach dem ersten Leerzeichen in jeder Zeile steht. Zum Beispiel wird die Ausgabe sein:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

jede Hilfe wird geschätzt.

21
Rana Khan

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Wie in den Kommentaren ausgeführt, -o ist nicht POSIX; jedoch haben sowohl GNU als auch BSD es, so dass es für die meisten Leute funktionieren sollte.

Ebenfalls, \s/\S ist möglicherweise nicht auf allen Systemen verfügbar. Wenn Ihr System dies nicht erkennt, können Sie ein Literal-Leerzeichen verwenden. Wenn Sie Leerzeichen und Tabulatoren in einem Klammerausdruck ([...]), oder der [[:blank:]] Zeichenklasse (beachten Sie, dass genau genommen \s ist äquivalent zu [[:space:]] und enthält vertikale Abstandszeichen sowie CR, LF oder VT, die Sie wahrscheinlich nicht interessieren).

Das awk nimmt an, dass die Zeilen nicht mit einem Leerzeichen beginnen.

36
Kevin
cut -d ' ' -f 1 < your-file

wäre am effizientesten.

14
awk '{print $1}' file

oder

sed 's/ .*//'
5
jlliagre

Und der durch Perl,

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

Durch GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
1
Avinash Raj