Читать поток до тех пор, пока не будет совпадать шаблон

Что у меня сейчас есть:

kubectl logs --timestamps jenkins-68bb89fd4d-fdnwj | sed "/2020-05-15/ q"
2020-05-15T21:48:34.356315314Z Running from: /usr/share/jenkins/jenkins.war

Что оно делает:

Он читает журналы с отметками времени и останавливается, как только sed находит совпадение. В этом случае я хочу извлекать только журналы из заданного диапазона времени, например. 2020-05-17-2020-05-19. Kubectl предоставляет флаг --since-time =, который позволяет указать дату начала для журналов, однако нет флага --until-time или его эквивалента. Проблема с моим текущим подходом заключается в том, что есть предположение, что шаблон, который я ищу, будет иметь место в журналах, что может быть не так. В этом конкретном случае журналов для данного дня может не быть, но будут журналы для следующего дня.

Что я ищу:

Я могу достичь своей цели, если буду читать поток до тех пор, пока не совпаду с шаблоном. В этом случае у меня может быть список дат в bash, например

dates = (2020-05-15 2020-05-16 2020-05-17)

Однако я не знаю, можно ли указать шаблон для sed, поэтому он прекратит работу, как только шаблон перестанет соответствовать. Можно ли этого добиться с помощью sed? Если нет, можно ли этого добиться с помощью awk, grep или другого инструмента?


person Adiqq    schedule 07.08.2020    source источник
comment
awk '/pattern/ { print; next } { exit }' и другие возможности.   -  person Kaz    schedule 07.08.2020


Ответы (1)


Команда

awk '/pattern/ { print; next } { exit }'

печатает строки, соответствующие шаблону, завершая работу при обнаружении строки, которая не содержит совпадения с шаблоном. Синтаксис /pattern/ можно заменить сложным выражением для нескольких полей и т. Д.

/pattern/ { print; next }

означает: если pattern совпадает, распечатать запись и затем завершить обработку записи; перейти к следующей записи.

{ exit }

является безусловным действием, поскольку ему не предшествует шаблонное выражение. exit - это встроенный оператор в Awk; если его аргумент опущен, статус завершения успешен.

person Kaz    schedule 07.08.2020