
Ich habe eine Datei wie diese
KN1234.1
KN2345.1
KN1233.1
Ich möchte den . durch v ersetzen, damit ich die Ausgabe als
KN1234v1
KN2345v1
KN1233v1
Nach dem . ist immer 1, aber nach KN kann ich auch bis zu 5 Ziffern haben. So etwas ist auch möglich KN14345.1
und die Ausgabe sollte seinKN14345v1
Ich habe den Befehl sed ausprobiert
sed 's/KN\d+.1/KN\d+v1/g' file.txt
aber nichts ist passiert. Wie kann ich das beheben?
Eine Perl-Lösung wäre auch wünschenswert.
Danke
Antwort1
Das:
sed 's/KN\d+.1/KN\d+v1/g' file.txt
tut nichts, weil Ihr sed es wahrscheinlich nicht unterstützt \d
(ich glaube, es ist von Perl), also stimmt das Muster mit nichts überein. Sie können sich hierauf beziehen:Warum funktioniert mein regulärer Ausdruck in X, aber nicht in Y?
Es würde trotzdem nicht wie gewünscht funktionieren, da das im Ersetzungsteil \d
einfach entgeht und nichts Besonderes ist, sodass Ihre Zahlen ersetzt werden.d
+
In Perl möchten Sie vielleicht so etwas:
perl -pe 's/(KN\d+)\.1/$1v1/' file.txt
Dabei $1
wird zur ersten Gruppe in Klammern erweitert und der Punkt wird maskiert, da es sich um einen regulären Ausdruck für handeltbeliebiges Zeichen. Oder
perl -pe 's/KN\d+\K\.1/v1/' file.txt
Dabei \K
wird der vorhergehende Teil des Spiels gelöscht, sodass er nicht ersetzt wird.
Wenn Ihnen der Kontext des Punkts egal ist, verwenden Sie tr
. (oder tr///
in Perl).