2012-01-04 2 views
2

Я использую Powershell для замены строки в текстовом файле.[character in powershell

Для замены Строка 1 к Строка 2 в file.txt Я использую

(Get-Content file.ps1) | Foreach-Object { $_ -replace 'String 1', 'String 2'} | Set-Content file.txt 

Она работает довольно хорошо, даже с для замены символов, как - и #

Нужно заменить строку символом [, но это не так Работа. Мне нужно заменить -state [VMstate] :: остановился с -состояния остановил, но он не работает с

(Get-Content TEMP_config.ps1) | Foreach-Object { $_ -replace '-state [VMstate]::stopped', '-state stopped'} | Set-Content TEMP_config.ps1 

Как я могу найти [ полукокса?

ответ

6

Для замены текста operator использует regular expressions. Один из способов поиска буквального текста, чтобы избежать поиска текста:

$search = [regex]::escape('[MyText]') 
(Get-Content file.ps1) | Foreach-Object { $_ -replace $search , 'String 2'} | Set-Content file.txt 
+0

работает как шарм, спасибо! –

+0

@RicardoPolo Рад, что вы нашли это полезным. Если вы не возражаете, пожалуйста, возьмите секунду, чтобы отметить ответ, который вы нашли, который решил вашу проблему как принятый ответ. Спасибо. –

4

Вы просто должны избежать [:

$_ -replace '-state \[VMstate]::stopped', '-state stopped' 

Или использовать [Regex]::escape если вы не уверены в том, что, чтобы избежать

2

Вы можете использовать «\ [» вместо «[» (с префиксом обратной косой чертой), чтобы избежать [символ