如何在两个其他字符串之间替换字符串

时间:2013-08-19 13:21:46

标签: powershell

我试图在几个文件中替换以下类型的字符串:

StringResourceHelper。[STRING_OF_INTEREST]资源字符串()字符串。[STRING_OF_INTEREST]

例如我想替换:

StringResourceHelper.HelpResourceString() Strings.Help

到目前为止,我得到了一个简单的替换,如果第二个字符串不重要,它将起作用:

    Get-ChildItem . *.cs -Recurse |
      Foreach-Object {
       $c = ($_ | Get-Content) 
       $c = $c -replace 'StringResourceHelper.','Strings.'
       $c | Set-Content $_.FullName -Encoding UTF8
    }

但这对我没有帮助,因为我也有像 StringResourceHelper.Culture 这样的字符串,不应该被触及。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要在正则表达式中删除文字点,否则.将匹配除换行符之外的任何字符。这样的事情应该有效:

$c = $c -replace 'StringResourceHelper\.(\w*?)ResourceString\(\)', 'Strings.$1'

此外,您的代码可以简化一点,如下所示:

$srch = 'StringResourceHelper\.(\w*?)ResourceString\(\)'
$repl = 'Strings.$1'

Get-ChildItem . *.cs -Recurse | % {
   $filename = $_.FullName
   (Get-Content $filename) -replace $srch, $repl |
       Set-Content $filename -Encoding UTF8
}