Как Grep до определенного персонажа или строки

3257
Sean Patrick Floyd

Мне нужно извлечь данные журнала из файлов журналов на многие тербайты. Дело в том, что данные, которые мне нужны, начинаются и заканчиваются шаблонами, которые я могу идентифицировать, но код между ними может быть от 10 до 100+ строк.

Пример:

Start # lots of lines here End 

В настоящее время, что я делаю grep -A 50 "Start", это дает мне старт и 50 строк после этого. Однако почти во всех случаях это больше или меньше, чем мне нужно. Больше означает, что итоговый файл отчета увеличивается на гигабайты больше, чем нужно, и меньше означает, что я не получаю нужную мне информацию.

Есть ли способ извлечь именно то, что мне нужно, используя стандартные инструменты Unix / Linux?

2
Что такое регулярное выражение? Ярослав Рахматуллин 11 лет назад 0

1 ответ на вопрос

3
Simon

Try it with awk:

awk '/^Start/,/^End/' file 

or if you prefer sed:

sed -n '/Start/,/End/p' file 
Круто, спасибо, попробую и дам знать Sean Patrick Floyd 11 лет назад 0
@SeanPatrickFloyd, пожалуйста. Я добавил также решение с помощью sed. Simon 11 лет назад 0
Хороший код там. Не могли бы вы объяснить, как работает `sed` в этом случае? Я попытался выяснить это самостоятельно, проверив man-страницу на ss64 и выполняя некоторые эксперименты с пробами и ошибками, но до сих пор не понимаю. :) Спасибо. 11 лет назад 0
@Radoo ** sed -n ** -> Подавляет вывод по умолчанию. ** '** -> начало команды фильтра ** / Пуск / ** -> регулярное выражение **, ** -> разделитель ** / Конец / ** -> регулярное выражение ** p ** -> Печать , Скопируйте пространство шаблона в стандартный вывод. ** '** -> конец фильтра ** файл ** -> имя файла Simon 11 лет назад 0
к сожалению, файлы журнала распакованы, поэтому я должен использовать двухэтапную версию: `zgrep -n -A 140" Запуск "http * / p * / some.log.pattern. *. gz | sed -n '/ Start /, / End / p'> / tmp / output.txt`, но он работает как шарм. Спасибо! Sean Patrick Floyd 11 лет назад 0
@Simon Хорошо, что я понял это, но ничего не смог найти об этом разделителе `,`. Справка говорит только о '/ regexp / substitution /'. Что это за колдовство? Где я могу найти подробное объяснение того, как работает sed? :) 11 лет назад 0
@Radoo: проверьте раздел «Адреса» [man-страницы] (http://linux.die.net/man/1/sed) - эта команда sed использует два адреса (оба из которых являются регулярными выражениями) для выбора диапазоны строк, к которым применяется команда "p". Gordon Davisson 11 лет назад 1

Похожие вопросы