Извлечь часть файла журнала

#regex #bash

#регулярное выражение #bash

Вопрос:

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

 2019-03-15 04:30:41-0400 id:xxxx-84f1-xxxx-85xx-c4xxxx ip:127.0.0.1 apikey:-- rt:47.3ms 200 GET /end/point
-- Request --
some content
....
-- Response --
....
2019-03-15 04:31:00-0500 uid:diffrent-id ip:10.10.10.10. netip:10.10.10.10 apikey:-- rt:309ms 200 GET /some/other/end/point
  

У меня есть id , которое находится рядом со временем возникновения. Я хочу извлечь все, что связано с этим id , до следующего события и сохранить это в файл.

Комментарии:

1. идентификатор указывается в каждой строке или только один раз, по истечении времени?

2. это происходит только один раз после времени

Ответ №1:

Чтобы получить все между двумя шаблонами, вы можете использовать эту sed команду:

 sed -n '/.* id:.*/,/.* uid:.*/p' log.txt
  

И вы получите

 -- Request --
some content
....
-- Response --
....
  

где

-n подавляет автоматическую печать пространства шаблонов

p печатает текущее пространство шаблона

Комментарии:

1. Это делает именно то, что мне было нужно! Спасибо!