2016-07-26 2 views
1

У меня есть текстовый файл и вы хотите повторно использовать/заменять что-то содержимое переменной в PowerShell.Использовать переменную в Заменить

  • Файл: my.json
  • Variable в Powershell $version
  • Поиск: version : "something"
  • Заменить "something" с содержанием переменной $version

Вот что я пытался. Поиск и замена выполняются как ожидалось, но результат version : "$version".

(Get-Content my.json) -replace '(?<pre>"version"[\s]*:[\s]*)(?<V>"[^\"]*")', '$1"$version"' | Out-File my.json 
+0

Значит ли [это] (http://stackoverflow.com/a/13286724/2486496) ответ помощь вообще? Я думаю, что escape-последовательность должна облегчить вашу проблему в любом случае. – gravity

+0

Powershell изначально использует парсер JSON, вам лучше использовать это, если сможете. Проверьте [ConvertFrom-JSON] (https://technet.microsoft.com/fr-fr/library/hh849898.aspx) и [ConvertTo-JSON] (https://technet.microsoft.com/fr-fr/ library/hh849922.aspx) методы – Aaron

ответ

4

Чтобы иметь возможность использовать переменные в строке замены, необходимо использовать строку двойной кавычек замены, а это означает, что вам нужно бежать обратные ссылки и вложенные двойные кавычки:

(Get-Content my.json) -replace '...', "`$1`"$version`"" | ... 
+0

Спасибо за ответ и редактирование! Хорошего дня! – dknaack

+0

@dknaack, если этот ответ решил вашу проблему, пожалуйста, подумайте о принятии его –

2

ответ Ansgar является отлично, но ` escape-последовательности могут быть уродливыми и препятствовать читаемости.

Я бы лично использовать оператор формата -f в сростить '$1' строковый литерал и значение $version:

(Get-Content my.json) -replace '...',('$1{0}' -f $version) 
+0

Спасибо! Выглядит лучше, да – dknaack

Смежные вопросы