替换包含任何字符的一组字符串

时间:2015-06-16 19:06:19

标签: string powershell replace

无论字符串包含什么,有没有办法替换一组字符串? 我试图替换一个包含:引号(""),括号([]),@,e。

的字符串
gci C:\test *.txt -recurse | ForEach {(Get-Content $_ | ForEach {$_ -replace '"my"', "money"}) | Set-Content $_ }

但是,如果我要替换的字符串在<>:

中有所有内容,那该怎么办?
PowerPlayReport Product_version="10.2.6100.36" xmlns="http://www.cognos.com/powerplay/report[1234@1]" Author="PPWIN" Version="4.0"

1 个答案:

答案 0 :(得分:1)

因此,您希望替换问题中包含的示例文本中的[]中的所有内容。如果你不知道(虽然我认为你现在)-replace支持正则表达式。一个简单的正则表达式可以找到您正在寻找的文本。我也将删除代码中的一些冗余。

Get-ChildItem C:\test -Filter *.txt -Recurse | ForEach-Object{
    $file = $_.FullName
    (Get-Content $file) -replace "\[.*?]","[bagel]" | Set-Content $file
}

借用regex101.com的解释

  • \[字面匹配字符[
  • .*?匹配任何字符(换行符除外)。量词:*?在零和无限次之间,尽可能少,根据需要扩展[懒惰]
  • ]字面匹配字符]

然后该行将在源文件中显示为以下内容。

PowerPlayReport Product_version="10.2.6100.36" xmlns="http://www.cognos.com/powerplay/report[bagel]" Author="PPWIN" Version="4.0"