我想以递归方式搜索特定属性文件的路径。找到文件后,我想搜索模式“@ 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)
}
答案 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 *