Wie kann man mit Vi(m) in einer Zeile die Anordner der Wörter tauschen?
-
Mal angenommen ich habe in einer Zeile folgenden Satz stehen:
Hans: "Sag mir deinen Namen" id=50
Und jetzt möchte ich, dass die id=50 ganz am Anfang der Zeile steht und danach ein Leerzeichen kommt. Wie kann ich diesen Austausch bewerkstelligen, ohne dass ich jetzt den Eintrag selber manuell reinschreibe und hinten in der Zeile das Zeugs lösche?
Genauso würde ich gerne wissen, wenn ich mehrer solcher Zeilen habe und das auf alle Zeilen angewendet werden soll:
Oskar: "Ich kenne dich nicht" id=45 Hans: "Sag mir deinen Namen" id=50 Susan: "Susan, und du?" id=53
-
:%s#\(.\+\) \(id=\d\+\)#\2 \1#g
EDIT:
und hinten in der Zeile das Zeugs lösche?
Bezieht sich das darauf, dass das "Zeug hinten" nicht entfernt werden soll, oder dass du das nur nicht manuell machen willst? Im ersten Fall dann:
:%s#\(.\+\) \(id=\d\+\)#\2 \1 \2#g
-
dachschaden schrieb:
:%s#\(.\+\) \(id=\d\+\)#\2 \1#g
EDIT:
und hinten in der Zeile das Zeugs lösche?
Bezieht sich das darauf, dass das "Zeug hinten" nicht entfernt werden soll, oder dass du das nur nicht manuell machen willst? Im ersten Fall dann:
:%s#\(.\+\) \(id=\d\+\)#\2 \1 \2#g
Naja, ich möchte eigentlich aus z.b. so etwas:
Hans: "Sag mir deinen Namen" id=50
das da machen:
id=50 Hans: "Sag mir deinen Namen"
Ich habe jetzt einen Ausdruck mal verwendet, allerdings habe ich einen anderen Satz und daher das id= durch das am ende andere Wort ausgetauscht, aber jetzt erhalte ich die Fehlermeldung
E486: Pattern not found: \(.\+\)\(Test.=\d\+\)
Könntest du mir erklären, was jede einzelne Funktion in diesem Ausdruck genau macht, damit ich das allgemein anwenden kann?
-
Frage zu vim schrieb:
Naja, ich möchte eigentlich aus z.b. so etwas:
Hans: "Sag mir deinen Namen" id=50
das da machen:
id=50 Hans: "Sag mir deinen Namen"
Dann pack für die Zukunft Anfangsdaten und gewünschtes Ergebnis so untereinander, wie du das getan hast, dann weiß absolut jeder, was du meinst.
Frage zu vim schrieb:
Könntest du mir erklären, was jede einzelne Funktion in diesem Ausdruck genau macht, damit ich das allgemein anwenden kann?
Das sind im Grunde nur reguläre Ausdrücke mit anderer Syntax, dazu findest du im Internet Tonnen an Doku.
Was suchst du mit "Test."? Den String "Test" mit einem beliebigen Zeichen hinter? Dann musst du den Punkt auch escapen. Oder nur "Test."? Dann reicht dein Ausdruck.
-
awk -F' ' '{ printf $NF" "; for(i = 1; i < NF; ++i) printf $i" "; printf "\n" }' foo.txt