Ich habe eine Eingabedatei, die einige Startdaten enthält und wenn diese Daten vor einem bestimmten Datum sind 1995-01-01
(YYYY-MM-DD-Format), dann das Datum mit dem Minimalwert ersetzen z.B.Powershell - Regex Datumsbereich ersetzen
<StartDate>1970-12-23</StartDate>
würde
<StartDate>1995-01-01</StartDate>
<StartDate>1996-05-12</StartDate>
geändert werden ist in Ordnung und würde unverändert bleiben.
Ich hatte gehofft, Regex ersetzen zu verwenden, aber die Überprüfung des Datumsbereichs funktioniert nicht wie erwartet. Ich hatte gehofft, so etwas wie dies für den Bereich verwenden
\b(?:1900-01-(?:3[01]|2[1-31])|1995/01/01)\b
Sie müssen weiterhin das 'Regex'-Objekt verwenden, da '-replace' keinen Rückruf als Ersatz unterstützt. Probieren Sie '(Get-Content $ infile) | ForEach-Objekt {$ rex.Replace ($ _, $ Rückruf)} | Set-Content $ outfile' –
Ich ziehe dies aus einer Datei mit mehreren Zeilen, also kann ich es mit einem Get-Content und Foreach-Objekt (vorausgesetzt, $ _ ist die Variable für die aktuelle Zeile) (Get-Content $ Pfad \ $ xml_out) | Foreach-Objekt {$ rex = [Regex] ' (\ d {4} - \ d {2} - \ d {\} <\StartDate>', $ rex.Replace ($ _, $ Rückruf)} | set-content $ path \ $ xml_out –
zoomzoomvince
Sie sollten keine '$ rex' innerhalb von' Foreach-Object' zuweisen. Weisen Sie '$ rex' davor und nur einmal zu, und verwenden Sie es wie oben gezeigt (Ich habe es in meiner PowerShell in Win7 getestet, und es funktioniert). –