Powershell, как заменить только данное количество совпадений? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь написать пакетный скрипт для Windows 10.

В файле XML у меня есть несколько тегов "version". С PowerShell я хочу заменить только первые 2 из них.

powershell -Command "(gc example.xml) -replace '(?s)<version>.*?</version>', '<version>2.0.0</version>' | Out-File example.xml"

Но этот код заменяет их все. Как я могу заменить только 2 из них?

1 Ответ

0 голосов
/ 07 сентября 2018

Я согласен с тем, что XML-файлы следует редактировать с помощью XML-инструментов,
и я подумал, что невозможно втиснуть его в один лайнер - но интересная ссылка gvee при условии преобразует это example.xml

> type .\example.xml
<version>1.0.1</version>
<version>1.0.2</version>
<version>1.0.3</version>
<version>1.0.4</version>

powershell -Nop -C "$RE=[RegEx]'(?<=<version>).*(?=</version>)';$RE.Replace([string]::Join(\"`n\",(gc '.\example.xml')),'2.0.0',2)"

<version>2.0.0</version>
<version>2.0.0</version>
<version>1.0.3</version>
<version>1.0.4</version>

Добавьте |Set-Content или |Out-File самостоятельно.

Редактировать: немного более простая версия, требующая PSv3 + для параметра Get-Content -raw

powershell -Nop -C "$RE=[RegEx]'(?<=<version>).*(?=</version>)';$RE.Replace((gc '.\example.xml' -raw),'2.0.0',2)"
...