A sed Lösung: Wenn die Zeile ein Leerzeichen enthält, wissen wir, dass es mehrere Worte Also löschen wir alles bis auf das erste Leerzeichen.
$ sed '/ /s/[^ ]* //' infile
test2
test3
test5 test6
test7
Für das Gegenteil, überprüfen wir erneut für ein Leerzeichen; Wenn es einen gibt, entfernen wir alles bis zum letzten Leerzeichen (.*
ist gierig).
$ sed '/ /s/.* //' infile
test2
test3
test6
test7
Wenn die Wörter durch Leerzeichen nicht getrennt sind, sondern beispielsweise Registerkarten können wir alle Instanzen eines Raumes ersetzen oben mit [[:blank:]]
:
sed '/[[:blank:]]/s/[^[:blank:]]*[[:blank:]]//' infile
et cetera.
Überprüfung für den Raum/leer ist nicht unbedingt notwendig: wenn es nicht ein, die Substitution nichts tut, so
sed 's/[^ ]* //' infile
und
sed 's/.* //' infile
würde auch funktionieren, aber nach dem Leerzeichen zu suchen, drückt meines Erachtens die Absicht deutlicher aus.