我有一个简单的可执行文件,可以运行,返回几行代码。
我需要从该行中取出十六进制的一部分并将其存储在变量中。
我有一些有用的东西,但想让它更干净?还是一行?
输出有几行,我只关心带有十六进制代码的那一行。 典型的返回字符串
Info: Download of filename (0xff77) completed
$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x"
$test1 -match "[0-9a-fA-F]{4}"
$test1 = $Matches[0]
我尝试像这样通过管道传输第一行的输出
$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x" | -match "[0-9a-fA-F]{4}"
显然这不起作用,而且我找不到更好的方法来做到这一点。
有没有办法解决前一个管道的结果并将其传递给匹配命令?
$test1 = .\some.exe 2>&1 | Select-String -Pattern "0x" | $HiddenPrevPipeVar -match "[0-9a-fA-F]{4}"
我希望我的 $test1 等于十六进制代码 ff77
最佳答案
让 Select-String
为您执行正则表达式匹配:
$test1 =
(.\some.exe 2>&1 | Select-String -Pattern '(?<=0x)[0-9a-f]+').Matches.Value
Select-String
输出Microsoft.PowerShell.Commands.MatchInfo
描述每场比赛的实例及其.Matches
属性包含System.Text.RegularExpressions.Match
的集合描述正则表达式传递给-Pattern
的内容的实例匹配。.Value
每个此类实例的属性都包含匹配的文本。虽然可以在正则表达式中使用捕获组 (
(...)
) 并引用它们通过.Matches
捕获的内容同样,在这种情况下,使用肯定的后向断言 ((?<=...)
) 来有效排除0x
会更简单。来自.Value
中报道的比赛另请注意
Select-String
与一般的 PowerShell 一样,默认情况下不区分大小写,因此[a-f]
正则表达式中涵盖小写和大写字母。
关于Powershell cmdlet 输出上的匹配运算符或管道输出的变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73666512/