如何用PowerShell一行代码提取可执行程序输出的十六进制字符串?
PowerShell单行提取十六进制字符串优化方案
直接用带捕获组的正则匹配,结合Select-String和ForEach-Object可以一步完成提取,最终得到不带0x的4位十六进制字符串:
$test1 = .\some.exe 2>&1 | Select-String '0x([0-9a-fA-F]{4})' | ForEach-Object { $_.Matches.Groups[1].Value }
代码说明:
2>&1:将程序的标准错误输出重定向到标准输出,确保能捕获所有输出内容Select-String '0x([0-9a-fA-F]{4})':匹配包含0x开头的行,通过括号捕获后面的4位十六进制字符(兼容大小写)ForEach-Object { $_.Matches.Groups[1].Value }:从匹配结果中提取捕获组的内容,也就是去掉0x前缀的目标十六进制字符串
关于直接管道使用-match失败的原因:
-match是比较运算符,并非管道 cmdlet,管道传递的对象作为左操作数时,$Matches是全局变量,在管道流中无法稳定捕获匹配结果,也没法直接提取分组内容。而Select-String是专门用于文本匹配的cmdlet,返回的MatchInfo对象包含完整的匹配详情,能可靠提取目标内容。
内容的提问来源于stack exchange,提问作者Gene Parmesan
相关产品推荐
相关产品推荐

