2016-05-14 26 views
0

Wie kann ich das erste Wort aus jeder Zeile in einer Datei entfernen, wenn es mehrere Wörter enthält?Erstes Wort bedingt entfernen

Datei:

test test2 
test3 
test4 test5 test6 
test7 

Ergebnis:

test2 
test3 
test5 test6 
test7 

Auch, wie kann ich nur letztes Wort von oben Datei zu speichern, dh

result2:

test2 
test3 
test6 
test7 

Antwort

1

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.

1

Um das erste Wort von jedem l zu entfernen ine,

cut -d' ' -f2- fileName 

Um das letzte Wort jeder Zeile zu erhalten und es in einer neuen Datei speichern,

awk '{print $NF}' fileName > newFileName 
Verwandte Themen