【问题标题】:Search for >$(bla)< and replace搜索 >$(bla)< 并替换
【发布时间】:2015-05-22 05:18:52
【问题描述】:

我必须替换文件中的值。这适用于使用此命令的普通文本

(Get-Content $file) | Foreach-Object {$_ -replace "SEARCH", "REPLACE"} | Set-Content $file

但是现在,搜索文本是“$(SEARCH)”(不带引号)。用 '`$' 转义 '$' 的反斜杠不起作用:

(Get-Content $file) | Foreach-Object {$_ -replace "`$(SEARCH)", "BLA"} | Set-Content $file

有什么想法吗?谢谢。

【问题讨论】:

  • 您是否尝试过使用' 而不是" 来禁用扩展?

标签: powershell finalbuilder


【解决方案1】:

-replace 操作符实际上是一个regular expression replacement 不是一个简单的字符串替换,所以你必须转义正则表达式:

(Get-Content $file) | Foreach-Object {$_ -replace '\$\(SEARCH\)', "BLA"} | Set-Content $file

请注意,您可以通过在字符串文字周围使用双引号 (") 的单引号 (') 来抑制字符串插值,我在上面已经这样做了。

【讨论】:

  • 或者更好的是,$_ -replace [regex]::escape('$(SEARCH)'), 'REPLACE',因为很多人不知道如何正确地转义正则表达式。
  • @TheMadTechnician 或者另一个选项是字符串的替换方法:$_.Replace('$(Search)', "BLA")。
  • @Joey 当然有。 $ 是行尾的锚点。除非它出现在字符集中,否则您必须对其进行转义。
  • 哎呀,我不应该在早上第一杯茶之前发表评论。你当然是对的。
【解决方案2】:

Macintron,

您可以尝试以下方法:

(Get-Content $file) | Foreach-Object {$_.replace('$(SEARCH)', "BLA"} | Set-Content $file

【讨论】:

    【解决方案3】:

    稍微(甚至更多)更快

    sc $file ((gc $file -Raw) -replace '\$\(search\)','BLAHH')
    

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2019-04-19
      • 2014-08-24
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多