[персонаж в PowerShell - PullRequest
       3

[персонаж в PowerShell

2 голосов
/ 04 января 2012

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

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

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

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

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

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

Как я могу найти [ char?

Ответы [ 3 ]

6 голосов
/ 04 января 2012

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

$search = [regex]::escape('[MyText]')
(Get-Content file.ps1) | Foreach-Object { $_ -replace $search , 'String 2'} | Set-Content file.txt
4 голосов
/ 04 января 2012

Вам просто нужно уйти от [:

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

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

2 голосов
/ 04 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...