2016-07-26 67 views
1

我有一個文本文件,並希望用PowerShell中的變量內容正則表達式/替換某些內容。在替換中使用變量

  • 文件:my.json
  • 變量在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)答案有幫助嗎?無論哪種方式,我認爲轉義序列應該可以緩解您的問題。 – 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

安斯加爾的答案是完全有效,但`轉義序列可以是醜陋的,阻礙可讀性。

我會親自使用-f格式運算符來串聯'$1'字符串文字和$version值:

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

謝謝!看起來更好,是的 – dknaack