Разбор для имитации "grep -C 2" в PowerShell версии 1.0 - PullRequest
5 голосов
/ 05 февраля 2009

Я пытаюсь просмотреть некоторые журналы и мне нужна информация до и после строки, по которой я могу сопоставить. Как бы я сделал это в PowerShell аля "grep -C 2"?

В версии 1 я не могу дождаться r2, тогда я могу поставить его на рабочие машины:)

Ответы [ 5 ]

7 голосов
/ 05 февраля 2009

В PowerShell эквивалент grep равен строка выбора . Вы можете использовать следующее.

cat file | select-string "pattern" -context 2

Примечание: это работает только в PowerShell v2.0.

3 голосов
/ 13 февраля 2009

Вместо того, чтобы снова использовать (gc $ bigfile), что заставит PowerShell считывать в $ bigfile в память каждый объект, переданный ему с помощью командлета ForEach-Object, вам, вероятно, следует прочитать файл в переменную и затем индекс массива от этого, вот так:

$bigfile = gc 'c:\scripts\bigfile.txt'
$bigfile | Select-String "melissao" | % {$bigfile[($_.LineNumber -3)..($_.LineNumber +1)]}

Кроме того, поскольку нумерация строк начинается с 1, а индексация массива начинается с 0, вам придется вернуться назад на 3, а не на 2, чтобы получить строку на два пробела выше «melissao», и перейти вперед на 1, а не на 2 , чтобы получить строку на два пробела ниже "мелиссао". В результате вы получите 5 нужных вам строк, а «мелиссао» между двумя линиями над и под ним.

Я не очень знаком с grep -C 2, поэтому я не знаю точно ли это повторяет эту функциональность.

1 голос
/ 05 февраля 2009

Становится ближе - потому что Select-String возвращает объекты MatchInfo, из которых я могу вытащить номер строки из (39017), теперь мне просто нужно вывести строку, окружающую ... так:

gc $bigfile | Select-String melissao | 
%{(gc $bigfile)[($_.LineNumber -2)..($_.LineNumber +2)]}

Если кто-нибудь может немного убрать это, чтобы сделать его менее медленным, у вас может быть ответ. В противном случае это решение работает, но, очевидно, не быстро.

1 голос
/ 05 февраля 2009

Увы, похоже, вам придется создать его самостоятельно или дождаться следующей версии powershell, так как похоже, что он реализован там . Вы можете скачать предварительную версию Powershell 2.0 с здесь .

0 голосов
/ 06 февраля 2009

Загрузить grep для Windows и вызвать grep из PowerShell?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...