У меня есть сценарий Powershell, который я пытаюсь написать, чтобы перейти через плохо отформатированный XML-файл, чтобы найти любые узлы, в которых слово «Date» является частью имени узла. И.Е.
<System><SystemName>Acme</Systemname><SystemDate>313</SystemDate><SystemNumber>3</SystemNumber><FileDate>394</FileDate></System>
Вышеуказанный шаблон повторяется сотни раз по всему файлу ... примерно для 70 МБ данных.
В реальном файле гораздо больше узлов, без перевода строки или чего-либо еще ... поэтому все это отображается в одной строке.
Что мне нужно сделать, это отсканировать файл и найти все узлы, которые заканчиваются на «Дата», где значение не 4-значное, и заменить его на 4-значное значение.
Вот то, что у меня есть до сих пор ... но похоже, что замена заменяет только первое появление, а не все остальные совпадения после первого совпадения.
Используя приведенный выше пример, он должен найти закрывающий </SystemDate>
и закрывающий </FileDate>
узлы и увидеть, что цифра составляет всего 3 символа и заменить на 9999.
$infile=get-content z:\system.txt
write-host $infile.Length
$regex = New-Object System.Text.RegularExpressions.Regex ">\d\d\d</(.*Date)"
$replace = $regex.Replace($infile,"9999")
write-host $infile.Length
write-host $replace.Length
set-content -Value $replace z:\new_system.txt
Буду признателен за любую помощь!