【发布时间】:2019-02-15 19:41:34
【问题描述】:
我对 powershell 真的很陌生。我需要替换文件中的一个值(总是在变化)。 该值如下所示:
"version": "2.4.5",
我想更换号码。 我有这段代码:
(Get-Content .\bower.json).replace('2.4.5', $version) | Set-Content .\bower.json
但这要求版本号始终为2.4.5,然后才能将其设置为新版本。如您所知,下一次该数字将不一样。
有没有人知道我可以替换版本号的方法,不管它是什么?也许用正则表达式?
玩了一会儿,我试过这个:
$pattern = '\"version\": \"(.*)\"'
$replace = """version"": ""$version""";
(Get-Content .\bower.json).replace($pattern, $replace) | Set-Content .\bower.json
但它并不能取代任何东西:( 如果我跑:
$replace -match $pattern
它返回“True”,所以我希望它能够正确替换? 这是我的 bower.json 文件:
{
"name": "sapphire",
"version": "2.4.5",
"dependencies": {
"angular": "~1.7.4",
"angular-animate": "~1.7.4",
"angular-barcode": "0.0.4",
"angular-bootstrap": "2.5.0",
"angular-cookies": "~1.7.4",
"angular-google-maps": "2.4.1",
"angular-loading-bar": "0.9.0",
"angular-mocks": "~1.7.4",
"angular-resource": "~1.7.4",
"angular-sanitize": "~1.7.4",
"angular-simple-cache": "1.0.6",
"angular-touch": "~1.7.4",
"angular-ui-mask": "1.8.7",
"angular-ui-select": "0.19.8",
"bootstrap-sass-official": "3.3.7",
"ng-idle": "1.3.2",
"ng-notify": "0.8.0",
"vkbeautify": "*",
"ngclipboard": "~2.0.0",
"angular-confirm": "angular1-confirm#1.1.0",
"angular-ui-router": "~1.0.20",
"font-awesome": "^5.6.1",
"ng-confirm": "angular-confirm#^1.1.0"
},
"devDependencies": {},
"appPath": "src",
"moduleName": "sapphire",
"overrides": {
"bootstrap": {
"main": [
"less/bootstrap.less",
"dist/css/bootstrap.css",
"dist/js/bootstrap.js"
]
}
},
"resolutions": {
"angular": "~1.7.4",
"angular-animate": "~1.7.4",
"angular-cookies": "~1.7.4",
"angular-mocks": "~1.7.4",
"angular-resource": "~1.7.4",
"angular-sanitize": "~1.7.4",
"angular-touch": "~1.7.4",
"components-font-awesome": "~5.0.6",
"ngclipboard": "~2.0.0",
"clipboard": "^2.0.0",
"angular-ui-router": "~1.0.20"
}
}
【问题讨论】:
-
您尝试过将 JSON 文件用作 JSON 吗?
$InStuff = Get-Content -LiteralPath 'FIle.json | ConvertFrom-JSON应该在$InStuff中为您提供一个结构化对象,您可以像处理其他对象一样处理它。那 otta 允许直接对对象进行替换。然后您可以从 json 转换并将其发送到文件。 -
你能告诉我一个如何做到这一点的例子吗?正如我所说,我是 powershell 新手,所以我什至不知道如何替换变量以及如何将其保存在我现有的文件中
-
我会把这个作为答案发布,因为这里的代码太难阅读了。 [咧嘴一笑]
-
$versionString -replace '^(.*)(\d\.\d\.\d)(.*)$', ('${1}' + $newversion + '$ {3}')
标签: powershell