在PowerShell中获得正确的字符串
我有一个控制文件,里面有不同的大学名称和政治学专业的学生人数 Clark=1200 UMASS=500 UPenn=200在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操作符从所选行中删除该
如果我这样做,我只得到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]