Powershell查找文件并递归替换文件中的字符串

时间:2015-04-21 15:35:54

标签: powershell-v3.0

我想以递归方式搜索特定属性文件的路径。找到文件后,我想搜索模式“@ 1.0.0”并替换为“@ 2.0.0” 我的脚本找到文件和字符串,但无法替换为较新的字符串。

 $RevString=Get-ChildItem -Path $buildFilePath -Filter package.json 
                          -Recurse | Select-String -Pattern "@1.0.0"

这会将结果显示为

C:\..\package.json:21:
"hl-common-ui-components@1.0.0", C:\..\package.json:21: 
"hl-common-ui-components@1.0.0",

我尝试了以下替换但不起作用

 ForEach ($i in $RevString) {
  (Get-Content $i) | 
   Foreach-Object {$_ -replace "@\d.\d.\d","@$major.$minor.$patch" } |  
   Set-content ($i)
 }

1 个答案:

答案 0 :(得分:0)

更改

$RevString=Get-ChildItem -Path $buildFilePath -Filter package.json -Recurse | Select-String -Pattern "@1.0.0"

$RevString=Get-ChildItem -Path $buildFilePath -Filter package.json -Recurse | Select-String -Pattern "@1.0.0" -List | Select-Object -ExpandProperty Path

-List的{​​{1}}参数仅返回每个输入文件中的第一个匹配项“。 Select-String表示我们只想要包含匹配字符串的文件的完整路径。 Select-Object -ExpandProperty Path现在只包含文件名。

$RevString返回MatchInfo对象。它们具有多个属性,包括LineNumber,Line,Filename和Path。如果将输出流水线化为Select-String,则可以看到所有这些内容,如:

Select-Object *