在PowerShell中获得正确的字符串

在PowerShell中获得正确的字符串,powershell,Powershell,我有一个控制文件,里面有不同的大学名称和政治学专业的学生人数 Clark=1200 UMASS=500 UPenn=200 如果我这样做,我只得到Upenn=200,但我想得到数字200。使用-match和-replace操作符: $pattern = '^UPenn=' (Get-Content 'C:\temp\CTRL.txt') -match $pattern -replace $pattern -match操作符选择以“UPenn=”开头的行,而-replace操作符从所选行中删除该

我有一个控制文件,里面有不同的大学名称和政治学专业的学生人数

Clark=1200 UMASS=500 UPenn=200
如果我这样做,我只得到Upenn=200,但我想得到数字200。

使用
-match
-replace
操作符:

$pattern = '^UPenn='
(Get-Content 'C:\temp\CTRL.txt') -match $pattern -replace $pattern

-match
操作符选择以“UPenn=”开头的行,而
-replace
操作符从所选行中删除该字符串。

您不必将文件内容传递到
选择字符串中,它可以自己处理文件。该命令返回一个对象,该对象具有包含所有找到的匹配项的Matches属性,而该属性又包含包含找到的文本的a value属性。如果修改正则表达式使其使用look-behind,则该值将包含200。大概是这样的:

(Select-String -Path 'C:\temp\CTRL.txt' -Pattern '(?<=UPenn=)\d+').Matches.Value

(选择String-Path'C:\temp\CTRL.txt'-Pattern'(?您可以使用正则表达式来匹配文件中每一行的等号右侧:

( Select-String -Path C:\temp\CTRL.txt -Pattern '(?<=.+=).*').Matches.Value

(选择String-Path C:\temp\CTRL.txt-Pattern'(?如果需要对文件内容进行更动态的访问,可以使用以下表达式将文件内容加载到
哈希表中:
^(?[^=]+)=(?*)$

例如:

$ctrl = @{}
$result = Get-Content 'c:\temp\CTRL.txt' | Select-String '^(?<key>[^=]+)=(?<value>.*)$'

Foreach ($match in $result.Matches) {
    $ctrl[$match.Groups['key'].Value] = $match.Groups['value'].Value
}

Write-Output $ctrl['Clark']
Write-Output $ctrl['UMASS']
Write-Output $ctrl['UPenn']
$ctrl=@{}
$result=Get Content'c:\temp\CTRL.txt'| Select String'^(?[^=]+)=(?*)$'
Foreach($result.Matches中的匹配项){
$ctrl[$match.Groups['key'].Value]=$match.Groups['Value'].Value
}
写入输出$ctrl['Clark']
写入输出$ctrl['UMASS']
写入输出$ctrl['UPenn']

只是为了提供一种不同的方法,如果文件中的所有键都不同,您可以使用。这种方法会起作用,因为您的键和相关值由
=
分隔

(Get-Content 'c:\temp\CTRL.txt' | ConvertFrom-StringData).UPenn

ConvertFrom StringData
将返回键值对的
哈希表
对象。可以使用
哈希表.key
语法访问每个键值。

。另一种方法是使用
-split

((Select-String -Path 'C:\temp\CTRL.txt' -Pattern '^UPenn=').Line -split '=', 2)[1]
((Select-String -Path 'C:\temp\CTRL.txt' -Pattern '^UPenn=').Line -split '=', 2)[1]