如何让PowerShell的Select-String输出通过管道调用Substring方法
提取SQL Server备份速度文件中的目标字符串问题解决
问题场景
需要从记录SQL Server备份速度的txt文件中提取目标字符串,首先用以下命令定位包含备份速度信息的行:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec"
但目标行长度超过2000字符,尝试通过管道调用substring截取内容时,执行以下代码出现错误:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec" | ForEach-Object { $_.substring(42,30) }
错误提示:
Method invocation failed because [Microsoft.PowerShell.Commands.MatchInfo] does not contain a method named 'substring'.
解决方案
JosefZ提供了针对性的解决方案:由于数据库名称被单引号包裹,备份速度被圆括号包裹,可通过以下代码提取目标内容:
Select-String -Path "DatabaseBackup - USER_DATABASES - FULL*.txt" -pattern "MB/sec" | ForEach-Object { $_.Line.substring($_.Line.IndexOf(''''), $_.Line.IndexOf('''', $_.Line.IndexOf('''')+1)-$_.Line.IndexOf('''')+1) + " " + $_.Line.substring($_.Line.IndexOf('('),$_.Line.IndexOf(')')-$_.Line.IndexOf('(')+1) }
输出示例
'DBA' (796.230 MB/sec) 'ReportServer' (488.596 MB/sec) 'ReportServerTempDB' (139.270 MB/sec) 'TSTGP' (420.375 MB/sec)
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

