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
![](https://images.gutefrage.net/media/user/Erzesel/1497339133085_nmmslarge__0_524_1080_1080_4b38ff31970de3b94deb6a27ca8a8f01.jpg?v=1497339133000)
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.
![](https://images.gutefrage.net/media/user/Lego2000/1624385654325_nmmslarge__441_0_669_670_16e736c73d261040f184ad453ace1399.png?v=1624385654000)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Du musst den Punkt "escapen". Sollte in Powershell so gehen:
`.
![](https://images.gutefrage.net/media/user/Lego2000/1624385654325_nmmslarge__441_0_669_670_16e736c73d261040f184ad453ace1399.png?v=1624385654000)
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?
![](https://images.gutefrage.net/media/user/Erzesel/1497339133085_nmmslarge__0_524_1080_1080_4b38ff31970de3b94deb6a27ca8a8f01.jpg?v=1497339133000)
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
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
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?
![](https://images.gutefrage.net/media/user/Lego2000/1624385654325_nmmslarge__441_0_669_670_16e736c73d261040f184ad453ace1399.png?v=1624385654000)