Как сопоставить несколько строк, начинающихся с TAB, и строку до 1-го в группе?

У меня есть файлы сторонних журналов, из которых я пытаюсь вывести ошибки из командной строки.

Журналы выглядят так:

time=1 time=2 time=3 at com.test.com.... at com.test.com.... at com.test2.com.... time=4 time=5 time=6 time=7 time=8 time=9 at org.badstuff.com... at org.badstuff.com... at org.badstuff.com... time=10 time=11 

Линии, начинающиеся с начала с символом TAB, поэтому их можно легко сопоставить.

Как я могу вытащить эти трассировки стека из этого файла и пару строк перед первой трассировкой стека каждый раз? Я нахожусь на Mac, но предпочел бы общее решение, которое работает на Mac / Linux, если это возможно, поскольку я должен работать на обоих довольно часто.

Итак, из приведенного выше примера я вытащил следующие

 time=2 time=3 at com.test.com.... at com.test.com.... at com.test2.com.... time=8 time=9 at org.badstuff.com... at org.badstuff.com... at org.badstuff.com... 

2 Solutions collect form web for “Как сопоставить несколько строк, начинающихся с TAB, и строку до 1-го в группе?”

Просто используйте контекст контекста, -B перед контекстом или параметр -C ontext в grep , например, чтобы соответствовать вашему примеру:

 grep -B2 '^\t' file 

Используйте grep -B2 -P '^\t' logfile чтобы выбрать две строки перед каждым набором совпадений. Возможно, вам придется замаскировать разделитель групп «-», который вставлен между совпадениями.

Результаты

 $ grep -B2 -P '^\t' /tmp/t time=2 time=3 at com.test.com.... at com.test.com.... at com.test2.com.... -- time=8 time=9 at org.badstuff.com... at org.badstuff.com... at org.badstuff.com... 
  • Вывод, который будет сохранен в файле с именем, аналогичным входному файлу
  • Как сделать grep в реальном журнале (stdout)?
  • Есть ли более простой способ grep всех файлов в каталоге?
  • grep IP-адреса в сценарии ожиданий
  • Поиск файлов в глобальных каталогах, исключая некоторые подпуты
  • Как дважды выпить?
  • Как обмануть скрипт init в ответ 0
  • bash - почему \ x0d \ x20 стирает строку
  • grep для всех строк, которые не имеют определенного слова
  • Оператор grep +
  • grep first n и последние n символов из строки в файле
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.