Откройте файл и отфильтруйте его с помощью регулярного выражения - PullRequest
7 голосов
/ 27 июня 2011

У меня большой лог-файл, и я хочу извлечь (записать в новый файл) определенные строки. Проблема в том, что мне нужна определенная строка и строка раньше. Таким образом, регулярное выражение должно быть применено к более чем одному ряду. Notepad ++ не может этого сделать, и я не хочу писать скрипт для этого.

Полагаю, я могу сделать это с помощью Powershell и однострочника, но я не знаю, с чего начать ...

Регулярное выражение не проблема, будет что-то вроде этого ^#\d+.*?\n.*?Failed.*?$

Итак, как я могу открыть файл с помощью Powershell, передав регулярное выражение и вернуть строки, которые соответствуют моему выражению?

1 Ответ

8 голосов
/ 27 июня 2011

Посмотрите на Select-String и -context параметр:

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

Get-Content c:\Windows\System32\LogFiles\HTTPERR\httperr2.log  |
    Select-String '2011-05-13 06:16:10' -context 1,0

Если вам нужно манипулировать им дальше, сохраните результат в переменной и используйте свойства:

$line = Get-Content c:\Windows\System32\LogFiles\HTTPERR\httperr2.log  |
        Select-String '2011-05-13 06:16:10' -context 1

# for all the members try this:
$line | Get-Member

#line that matches the regex:
$line.Line
$line.Context.PreContext

Если есть другие строки, соответствующие регулярному выражению, получить к ним доступ в скобках:

$line = Get-Content c:\Windows\System32\LogFiles\HTTPERR\httperr2.log  |
        Select-String '2011-05-13 06:16:10' -context 1
$line[0] # first match
$line[1] # second match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...