powershell заменить специальные символы

Я новичок в powershell, но пытаюсь заменить определенные символы в файлах .xml. Похоже, я уже спотыкаюсь на первых шагах.

например попробую заменить:

<?xml version="1.0"?>

с

<?xml version="2.0"?>

Ниже вы найдете код, который я написал до сих пор:

Get-Childitem "C:\Users\jp\Desktop\Test" | ForEach-Object {

        $Content = Get-Content $_.fullname
        $Content = ForEach-Object { $Content -replace "(<?xml version=`"1.0`"?>)","(<?xml version=`"2.0`"?>)" }

        Set-Content $_.fullname $Content -Force

        }

Проблема в том, что это только начало строк, которые мне нужно заменить. Есть ли способ заменить любой текст в определенном диапазоне независимо от символов внутри?

Интересно, как заменить полную строку независимо от того, какие специальные символы у меня есть внутри. Заранее спасибо.


person Mike Myers    schedule 10.08.2012    source источник


Ответы (2)


Используйте метод Escape, чтобы экранировать специальные символы во время выполнения. Вам не нужно избегать шаблона замены:

(Get-Content c:\dump\xml) | 
ForEach-Object {$_ -replace [regex]::Escape('<?xml version="1.0"?>'),'<?xml version="2.0"?>'} | 
Set-Content c:\dump\xml
person Shay Levy    schedule 11.08.2012
comment
Это круто, вот почему мне нравится это место, люди помогают и учатся одновременно. - person justinf; 11.08.2012

Привет, есть много способов сопоставлять регулярные выражения, вы можете просто изменить свой код на приведенный ниже.

\ просто экранирует специальные чартеры регулярных выражений, так что часть совпадения работает.

Get-Childitem "c:\dump\xml" | ForEach-Object {

        $Content = Get-Content $_.fullname
        $Content = ForEach-Object { $Content -replace '(<\?xml version="1\.0"\?>)','<?xml version="2.0"?>' }

        Set-Content $_.fullname $Content -Force

        }
person justinf    schedule 10.08.2012