Powershell in .txt Punkt (.) durch etwas anderes ersetzen?
$old2= "."
$new2= ","
(get-content C:\Users\...\OldFile.txt -Raw) -replace $old2,$new2>C:\Users\...\NewFile.txt
Dieser Ausschnitt funktioniert soweit, wenn ich z.b. a´s ersetze ersetzt er wirklich nur a´s aber bei Punkten ersetzt er jedes einzelnes Zeichen.
Steht der Punkt ( . ) irgendwie für alles?
Wie kann ich meine Pünktchen ersetzen?
Benutze Powershell 5.1
3 Antworten
replace arbeitet mit RegEx https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck).
Der Punkt repräsentiert in regulären Ausdrücken ein beliebiges Zeichen. Folglich werden alle Zeichen durch Kommas ersetzt.
[ ] ( ) { } | ? + - * ^ $ \ .: ! < = müssen um sie als Literal zu verwenden durch einen Backslash maskiert (escaped) werden. \[\ ]\ (\ )\ {\ }\ |\?\+ \-\* \^\$ \\\.\:\!\ <\ = .
Ebenso müssen die Buchstaben dDwWsS im Suchbegriff escaped werden \d\D\w\W\s\S da diese Buchstaben vordefinierte Zeichenklassen darstellen
In deinem Fall ist die Lösung simpel:
$old2='\.'
$new2= ','
(get-content 'OldFile.txt' -Raw) -replace $old2,$new2 >'NewFile.txt'
- Ich empfehle Dir statt "Doublequotes" als Stringbegrenzer 'Singlequotes' zu verwenden.
- Pfade solltest Du ebenfalls mit 'Singlequotes' einfassen, da dies vor unliebsamen Überraschungen schützt, wenn ein Pfad Leerzeichen oder Klammern etc enthält.
Du musst den Punkt "escapen". Sollte in Powershell so gehen:
`.
Sicher das es `. ist?
bei `. ersetzt er immer noch alles und bei ´. passiert gar nichts.
für mehr Kontext zwei Zeilen der .txt sehen so aus:
2021-08-25 08:44:04 , 1770.0 , 1750.2 , 50.8 ,
2021-08-25 08:44:09 , 1770.0 , 1750.2 , 50.4 ,
Ich habe gerade gesehen, das es doch die PS Version 5.1 ist, liegt es vielleicht daran?
Für replace, split match etc. gilt der Backslasch\ als EscapeCharacter, da diese Methoden mit RegEx arbeiten.
Der Backtick` dient als "word-wrap operator" und zum maskieren von einigen Steuerzeichen in Nonliteralstrings , aber nicht in regulären Ausdrücken. https://get-powershellblog.blogspot.com/2017/07/bye-bye-backtick-natural-line.html#blastedbacktick
Bist du sicher, dass es in der PS dafür keine kürzere, bzw. elegantere Lösung gibt?
Bei unixoiden Shells würde man es einfach so machen:
tr . , <in.txt >out.txt
Das geht doch sicherlich ähnlich schick in der PS, oder?