Ersetzen eines Punktes durch ein Zeichen mit sed oder perl

Ersetzen eines Punktes durch ein Zeichen mit sed oder perl

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.1und 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 \deinfach 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 $1wird 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 \Kwird 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).

verwandte Informationen