PowerShellRegex匹配并替换kix文件中的字符串

时间:2017-06-27 15:59:31

标签: regex powershell

我正在导入KIX文件:

.modal-body { min-height: 350px; overflow-y: visible !important; }

该文件包含以下内容:

$KIXOLD = get-content E:\File.kix

我需要获取脚本版本,在本例中为$ScriptVer = "12.0" ; Current Script Version Number ,但该数字可能因我导入的文件而异。

我已尝试12.0和正则表达式:

Select-String

但是仍然抓住整个行,包括$OLDVER = $KIXOLD | Select-String -Pattern "\$ScriptVer = `"\d\d\.\d`"" 而不只是; Current Script Version Number

我认为这必须简单,我只是把它弄错了,但我尝试过的任何东西对我都没用。

最终目标是将$scriptver = "12.0"作为一个int,增加并替换它,但是我无法做到这一点,直到我可以将12.0与其余的多个隔离开来-thousand line KIX file

4 个答案:

答案 0 :(得分:1)

试试这个

get-content "E:\File.kix" | where {$_ -like '$ScriptVer*'} | %{$_.split( '=;"')[2]}

答案 1 :(得分:1)

其他方法:

$template=@"
{Row*:ScriptVer = "{Version:12.0}"              ; Xxx}
"@


(get-content "E:\File.kix" | ConvertFrom-String -TemplateContent $template).Row.Version

答案 2 :(得分:0)

这有帮助吗?         $ OLDVER = [regex] ::匹配($ KIXOLD," ScriptVer =([1-9] \ d。\ d)")。groups [1] .value

答案 3 :(得分:0)

Select-String输出正则表达式MatchInfo个对象。要获得该值,您需要使用一组所需的文本进行匹配,然后展开匹配,然后展开该组,然后展开该值,例如

$Ver = Select-String -Path E:\File.kix -Pattern '^\$ScriptVer = "(.*?)"' | 
           Select-Object -ExpandProperty Matches | 
           ForEach-Object { $_.Groups[1].Value }