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


20
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. Die Ausgabe wird zum Beispiel sein:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

Jede Hilfe wird geschätzt.

Antworten:


35

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Wie in den Kommentaren erwähnt, -oist es nicht POSIX; GNU und BSD haben es jedoch, so dass es für die meisten Menschen funktionieren sollte.

Auch \s/ \Skann nicht auf allen Systemen sein, wenn Ihr es nicht erkennt man eine wörtliche Raum verwenden können, oder wenn Sie wollen Raum und Reiter, die in einem Ausdruck in eckigen Klammern ( [...]) oder die [[:blank:]]Zeichenklasse (beachten Sie, dass streng genommen \sist Entspricht [[:space:]]und enthält Zeichen mit vertikalem Abstand sowie CR, LF oder VT, die Sie wahrscheinlich nicht interessieren.

Die awk man davon ausgeht , die Linien nicht mit einem Leerzeichen beginnen.


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

wäre das effizienteste.


4
Ich habe dies in mehreren Ihrer Antworten bemerkt und mich gefragt, ob es einen Grund dafür gibt: Sie scheinen immer eine Eingabeumleitung hinzuzufügen, auch wenn der Befehl ohne sie funktionieren kann. Können Sie bitte erklären, warum das <hier nützlich ist?
Joseph R.

5
@ JosephR. Du meinst cut < filevs cut file? Dann siehe unix.stackexchange.com/a/70759/22565
Stéphane Chazelas

Schnitt kann die beste Lösung für Probleme sein, die so einfach sind. Ich würde awk (oder perl) für komplexere Übereinstimmungen reservieren.
ChuckCottrill

@StephaneChazelas Vielen Dank für die (charakteristische) Einsicht :)
Joseph R.


1

Und der eine durch perl,

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

Durch GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.