как найти линии, которые соответствуют многим шаблонам

Я пытаюсь найти строки, начинающиеся с одного из многих шаблонов во многих файлах (разбор журнала).
Есть ли лучшее решение, чем:

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 у меня нет номера строки, в которой был найден шаблон.


person Vexator    schedule 27.04.2020    source источник
comment
Вам не нужно использовать Get-Content. Select-String сам выбирает путь с подстановочным знаком. ;-)   -  person Olaf    schedule 27.04.2020
comment
.. и если вы используете RegEx, просто разделите строки для соответствия? Select-String -Pattern String1|String2   -  person Scepticalist    schedule 27.04.2020


Ответы (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 вернет только первую строку

person Vexator    schedule 28.04.2020