【问题标题】:Use Variable in Replace在替换中使用变量
【发布时间】:2016-07-26 22:54:06
【问题描述】:

我有一个文本文件,想用 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

【问题讨论】:

  • this 回答有帮助吗?我认为转义序列应该可以缓解您的问题。
  • Powershell 原生实现了 JSON 解析器,如果可以的话,最好使用它。查看ConvertFrom-JSONConvertTo-JSON 方法

标签: regex powershell


【解决方案1】:

为了能够在替换字符串中使用变量,您需要使用双引号替换字符串,这意味着您需要转义反向引用和嵌套双引号:

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

【讨论】:

  • 感谢您的回答和编辑!祝你有美好的一天!
  • @dknaack 如果这个答案解决了你的问题,请考虑接受它
【解决方案2】:

Ansgar 的回答是完全有效的,但` 转义序列可能很难看,并妨碍可读性。

我个人会使用-f 格式运算符来连接'$1' 字符串文字和$version 的值:

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

【讨论】:

  • 谢谢!看起来更好,是的
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2013-07-10
相关资源
最近更新 更多