string - 在 Powershell 中从字符串中提取字符串
问题描述
我有一个字符串long string: its a teamcity buildLog
这是来自 teamcity 的 buildLog。
[11:27:30] : [Step 5/5] 15:27:30 INFO: Average times: total 0.455, latency 0.455, connect 0.004
[11:27:30] : [Step 5/5] 15:27:30 INFO: Percentiles:
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] | Percentile, % | Resp. Time, s |
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] | 0.0 | 0.021 |
[11:27:30] : [Step 5/5] | 50.0 | 0.103 |
[11:27:30] : [Step 5/5] | 90.0 | 1.166 |
[11:27:30] : [Step 5/5] | 95.0 | 2.27 |
[11:27:30] : [Step 5/5] | 99.0 | 2.77 |
[11:27:30] : [Step 5/5] | 99.9 | 6.996 |
[11:27:30] : [Step 5/5] | 100.0 | 10.312 |
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] 15:27:30 INFO: Request label stats:
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:30] : [Step 5/5] | label | status | succ | avg_rt | error |
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:30] : [Step 5/5] | Activity History | OK | 100.00% | 1.608 | |
[11:27:30] : [Step 5/5] | Asset Allocation | OK | 100.00% | 0.100 | |
[11:27:30] : [Step 5/5] | Dashboard Cards and Employee Information | OK | 100.00% | 0.255 | |
[11:27:30] : [Step 5/5] | Fund Details | OK | 100.00% | 0.825 | |
[11:27:30] : [Step 5/5] | Investments | OK | 100.00% | 0.132 | |
[11:27:30] : [Step 5/5] | Minimum Version | OK | 100.00% | 0.032 | |
[11:27:30] : [Step 5/5] | Rate of Return | OK | 100.00% | 0.047 | |
[11:27:30] : [Step 5/5] | Retirement Outlook Card | OK | 100.00% | 1.166 | |
[11:27:30] : [Step 5/5] | Retirement Outlook Full | OK | 100.00% | 1.160 | |
[11:27:30] : [Step 5/5] | Savings Rate | OK | 100.00% | 0.112 | |
[11:27:30] : [Step 5/5] | Secure Auth Login | FAIL | 98.58% | 0.207 | Bad Request |
[11:27:30] : [Step 5/5] | Validate Savings Rate Change | OK | 100.00% | 0.127 | |
[11:27:30] : [Step 5/5] | Vested Balance | OK | 100.00% | 0.157 | |
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:35] : [Step 5/5] 15:27:35 INFO: Ending data feeding...
[11:27:36] : [Step 5/5] 15:27:36 INFO: Online report link: https://a.blazemeter.com/app/#/masters/36669958
从上面的构建日志中,我必须获取Percentiles Table
、Request Label Stats
表和Online Report Link
我尝试了下面的代码,但它没有返回:
$firststring = "Percentiles:"
$secondstring = "Request label stats:"
$pattern = "$firststring(.*?)$secondstring"
$result = [regex]::Match($file,$pattern).Groups[1].Value
$result >> returns none
和下面的代码来获取字符串。
$Regex = [Regex]::new("(?<=Percentiles:)(.*)(?=Request label stats:)")
$Match = $Regex.Match($status)
if($Match.Success)
{
$Match.Value
}
这也没有返回。任何帮助将非常感激。
解决方案
一旦您掌握了正则表达式模式,您就可以使用它switch
来遍历日志行并从表中构建对象。下面我将其分解为单独的功能。
$log = @'
[11:27:30] : [Step 5/5] 15:27:30 INFO: Average times: total 0.455, latency 0.455, connect 0.004
[11:27:30] : [Step 5/5] 15:27:30 INFO: Percentiles:
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] | Percentile, % | Resp. Time, s |
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] | 0.0 | 0.021 |
[11:27:30] : [Step 5/5] | 50.0 | 0.103 |
[11:27:30] : [Step 5/5] | 90.0 | 1.166 |
[11:27:30] : [Step 5/5] | 95.0 | 2.27 |
[11:27:30] : [Step 5/5] | 99.0 | 2.77 |
[11:27:30] : [Step 5/5] | 99.9 | 6.996 |
[11:27:30] : [Step 5/5] | 100.0 | 10.312 |
[11:27:30] : [Step 5/5] +---------------+---------------+
[11:27:30] : [Step 5/5] 15:27:30 INFO: Request label stats:
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:30] : [Step 5/5] | label | status | succ | avg_rt | error |
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:30] : [Step 5/5] | Activity History | OK | 100.00% | 1.608 | |
[11:27:30] : [Step 5/5] | Asset Allocation | OK | 100.00% | 0.100 | |
[11:27:30] : [Step 5/5] | Dashboard Cards and Employee Information | OK | 100.00% | 0.255 | |
[11:27:30] : [Step 5/5] | Fund Details | OK | 100.00% | 0.825 | |
[11:27:30] : [Step 5/5] | Investments | OK | 100.00% | 0.132 | |
[11:27:30] : [Step 5/5] | Minimum Version | OK | 100.00% | 0.032 | |
[11:27:30] : [Step 5/5] | Rate of Return | OK | 100.00% | 0.047 | |
[11:27:30] : [Step 5/5] | Retirement Outlook Card | OK | 100.00% | 1.166 | |
[11:27:30] : [Step 5/5] | Retirement Outlook Full | OK | 100.00% | 1.160 | |
[11:27:30] : [Step 5/5] | Savings Rate | OK | 100.00% | 0.112 | |
[11:27:30] : [Step 5/5] | Secure Auth Login | FAIL | 98.58% | 0.207 | Bad Request |
[11:27:30] : [Step 5/5] | Validate Savings Rate Change | OK | 100.00% | 0.127 | |
[11:27:30] : [Step 5/5] | Vested Balance | OK | 100.00% | 0.157 | |
[11:27:30] : [Step 5/5] +------------------------------------------+--------+---------+--------+-------------+
[11:27:35] : [Step 5/5] 15:27:35 INFO: Ending data feeding...
[11:27:36] : [Step 5/5] 15:27:36 INFO: Online report link: https://a.blazemeter.com/app/#/masters/36669958
'@ -split '\r?\n'
function get-percentiles {
param()
$headerPattern = '\| Percentile'
$endPattern = '^[^|+]*$'
$inTable = $false
switch -regex ($log) {
$headerPattern {
$inTable = $true
continue
}
$endPattern {
if ($inTable) { break } else { continue }
}
'\|([^|]+)\|([^|]+).*$' {
if ($inTable) {
[PSCustomObject]@{
Percentile = $Matches[1].Trim()
Time = $Matches[2].Trim()
}
}
}
}
}
function get-labeltable {
param()
$headerPattern = '\| label'
$endPattern = '^[^|+]*$'
$inTable = $false
switch -regex ($log) {
$headerPattern {
$inTable = $true
continue
}
$endPattern {
if ($inTable) { break } else { continue }
}
'\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+)\|([^|]+).*$' {
if ($inTable) {
[PSCustomObject]@{
Label = $Matches[1].Trim()
Status = $Matches[2].Trim()
Succ = $Matches[3].Trim()
AvgRT = $Matches[4].Trim()
Error = $Matches[5].Trim()
}
}
}
}
}
get-percentiles | Format-Table
get-labeltable | Format-Table
输出
Percentile Time
---------- ----
0.0 0.021
50.0 0.103
90.0 1.166
95.0 2.27
99.0 2.77
99.9 6.996
100.0 10.312
Label Status Succ AvgRT Error
----- ------ ---- ----- -----
Activity History OK 100.00% 1.608
Asset Allocation OK 100.00% 0.100
Dashboard Cards and Employee Information OK 100.00% 0.255
Fund Details OK 100.00% 0.825
Investments OK 100.00% 0.132
Minimum Version OK 100.00% 0.032
Rate of Return OK 100.00% 0.047
Retirement Outlook Card OK 100.00% 1.166
Retirement Outlook Full OK 100.00% 1.160
Savings Rate OK 100.00% 0.112
Secure Auth Login FAIL 98.58% 0.207 Bad Request
Validate Savings Rate Change OK 100.00% 0.127
Vested Balance OK 100.00% 0.157
推荐阅读
- node.js - AWS CloudTrail lookupEvents 不适用于 StartTime 和 EndTime 节点 js。获取所有事件而不是按时间过滤事件
- python - Openpyxl 创建具有工作表名称和特定单元格值的数据框?
- c# - 如何在网格中使粗体一半的文本?
- linux - 高速串行在 Linux 上出现乱码,但在 Windows 上工作
- git - Gitlab 只允许使用 LDAP 注册的克隆,不能取消挂钩
- javascript - 单击传单标记时如何在弹出窗口上显示图像和链接?
- c# - Vector3.Lerp 没有完全移动
- android - 为什么从同一个库中的一些导入返回为未解析的引用?
- java - 如何正确地将元素添加到双向关系?我正在收集被驱逐
- reactjs - React 中对象列表的关键用法