我希望是一个足够简单的问题。
我有一个包含以下行的文本日志文件:
123,010502500114082000000009260000000122001T
我想搜索日志文件并返回上述文本的“00000000926”部分。于是我写了一个正则表达式:
(?<=123.{17})。{11}
因此,当后面的文本等于 '123' 和 17 个字符时,返回下一个 11。在在线正则表达式编辑器上测试时,这可以正常工作。但是在 Powershell 中,返回的是整行而不是我想要的 11 个字符,我不明白为什么。
$InputFile = get-content logfile.log
$regex = '(?<=123.{17}).{11}'
$Inputfile | select-string $regex
(返回整行)。
为什么powershell返回整行?
最佳答案
不打折Select-String
刚刚。赞 Briantist说它正在做你想做的事,但你需要以两种方式之一提取你真正想要的数据。 Select-String
返回 Microsoft.PowerShell.Commands.MatchInfo
对象而不仅仅是原始字符串。我们还将使用 Select-String
能够直接获取文件输入。
$InputFile = "logfile.log"
$regex = '(?<=123.{17}).{11}'
Select-string $InputFile -Pattern $regex | Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
如果你至少有 PowerShell 3.0
(Select-string $InputFile -Pattern $regex).Matches.Value
这在两种情况下都给出
00000009260
关于regex - Powershell忽略正则表达式后面的查看以返回整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851877/