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-Key: 1747762075

Url: https://administrator.de/contentid/1747762075

Printed on: April 26, 2024 at 20:04 o'clock

Member: colinardo
Solution colinardo Jan 21, 2022 updated at 16:25:18 (UTC)
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
Member: Crashzero
Crashzero Jan 21, 2022 at 16:43:14 (UTC)
Goto Top
Super, klappt, vielen Dank.