crashzero
Goto Top

Zeichen in Textdatei ersetzen via Powershell

Moin,
ich kriege es nicht hin in einer vorhandenen Textdatei ein bestimmtes Zeichen durch einen Unterstrich _ zu ersetzen.

Meine Datei :
TEST^_05.06.29-14:53:00-DST-1.3.12.2.1107.5.2.6.14420_Text1^Text2

Meine Powershellzeile :

((Get-Content -path I:\pfad\tmp\datei.dat -Raw) -replace '^',' ') | Set-Content -Path I:\pfad\tmp\datei_neu.dat  

Ich bekomme nur eine Ausgabe wie :

 TEST^_05.06.29-14:53:00-DST-1.3.12.2.1107.5.2.6.14420_Text1^Text2
(Vor dem "TEST" ist das Leerzeichen eingesetzt).

Was mache ich falsch ?

Content-ID: 1747762075

Url: https://administrator.de/forum/zeichen-in-textdatei-ersetzen-via-powershell-1747762075.html

Ausgedruckt am: 22.12.2024 um 08:12 Uhr

colinardo
Lösung colinardo 21.01.2022 aktualisiert um 17:25:18 Uhr
Goto Top
Servus again @Crashzero ,
Was mache ich falsch ?
du musst das ^ (Caret) mit einem Backslash escapen (\^) wenn du den -replace Operator nutzen willst, denn dieser nutzt Regular-Expression Syntax und in dieser bedeutet das ^ = "Anfang eines Strings" und das ist ein Non-Capturing Sonderzeichen in Regular Expression Syntax, um es literal zu verwenden musst du es escapen.
Anfangs- und Endezeichen
(Get-Content -path I:\pfad\tmp\datei.dat -Raw) -replace '\^','_' | Set-Content -Path I:\pfad\tmp\datei_neu.dat  
Alternative ohne -replace Operator und der "normalen" Replace Methode der String Klasse, hier brauchst du nicht escapen da diese die Zeichenkette als Literal verarbeitet.
(Get-Content -path I:\pfad\tmp\datei.dat -Raw).replace('^','_') | Set-Content -Path I:\pfad\tmp\datei_neu.dat  
Als Wochenend-Lektüre empfohlen:
Powershell Leitfaden für Anfänger
Regular Expressions Tutorial

Grüße Uwe
Crashzero
Crashzero 21.01.2022 um 17:43:14 Uhr
Goto Top
Super, klappt, vielen Dank.