【问题标题】:how to find lines that match many patterns如何找到匹配许多模式的行
【发布时间】:2020-08-11 03:39:25
【问题描述】:

我正在尝试从许多文件中的许多模式之一开始查找行(日志解析)。
有没有比这更好的解决方案:

Get-ChildItem -Filter *DBLog.txt | ForEach-Object {
    $name = $_.Name
    Get-Content -Path $_.FullName | 
    Select-String -Pattern '^Msg*' |
    Select-Object @{Name='File Name'; Expression={$name}}, LineNumber, Line
} |
Out-GridView

不幸的是,上面的脚本只搜索一种模式,并且使用Where-Object 我没有找到该模式的行号。

【问题讨论】:

  • 你不需要使用Get-ContentSelect-String 本身采用带有通配符的路径。 ;-)
  • ..如果您正在使用正则表达式,只需分隔字符串以匹配?选择字符串-模式“String1|String2”

标签: powershell foreach get-childitem select-string foreach-object


【解决方案1】:

看起来我让它变得不必要地复杂了;)

Select-String -Path *DBLog.txt -Pattern '^Msg|^Warn' |
Select-Object FileName, LineNumber, Line |
Out-GridView

但我还有一个问题......你如何添加额外的一行?我要查找的内容(SQL Server 错误)用 2 行编写:

消息 208,级别 16,状态 1,服务器 LOCALHOST,第 9 行
对象名称无效……

Select-String 只会返回第一行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多