Удалите предыдущие строки в хвосте или меньше

291
Qohelet

Я использую tail -fили less +Fдля наблюдения за изменением файла журнала. Я знаю с определенного момента, что строки, которые я ищу, появятся.

Так что весь этот мусор до этого момента мне не нужен и я бы хотел как-то его убрать.

Есть ли способ сделать это? Не должно быть, tailили lessя не ограничен этим.

0
Предположим, что входные данные были `seq 100`, и было известно, что только строки больше чем * 50 * имели необходимые строки. Скажем, необходимые строки: * 61 * и * 63 * ... является ли цель печати от * 61 * до * 100 * (40 строк) или просто * 61 * и * 63 *, (2 строки)? agc 6 лет назад 0
Я хотел бы, чтобы это было так ясно. Я вижу программу и журналы параллельно, и когда достигается определенная точка в программе, я знаю, что ожидаемая строка появится в ближайшие 3-5 секунд. Все, что написано в журнале до этого момента, не имеет отношения к делу, и я хотел бы удалить его. Qohelet 6 лет назад 0

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

0
gmelis

Используйте, tail -F <logfile> | grep '<string>'и вы увидите только строки, содержащие <string>.

Я не знаю, какую строку я жду. Я просто знаю, в какие сроки он будет записан в лог-файл. Qohelet 6 лет назад 0
Итак, у вас есть что-то вроде этого времени, например, с 09:45:00 до 10:20:59, например? `awk` может помочь в таком случае, если вы не хотите написать какую-либо программу анализа, использующую` python`, `perl`,` bash` или любой другой язык сценариев. Или вы можете использовать функцию * range * для ʻsed`, как в `tail -F / var / log / syslog | sed -n -e '/ 09:45: /, / 10: 15: / p'`, чтобы напечатать все записи журнала с 09:45 до 10:15. gmelis 6 лет назад 0
В начале есть время, но иногда приходит более 50 журналов в секунду (не всегда, но иногда). Может быть, мне нужно разделить 11:31:33 пополам и выбросить все до и все за первую четверть 11:31:36 тоже не так интересно Qohelet 6 лет назад 0
Хорошо, там * должно быть что-то, что вы ищете. `sed`,` awk`, `grep` и piping могут получить вас достаточно далеко, плюс вы можете ограничить то, что вы ищете, с помощью` regex`es вида `/09:45:.*source_of_message.*begin_of_interesting_message/ , / 10: 15. * конец / ` gmelis 6 лет назад 0
Пока я в основном знаю, на что не похожа эта запись. В основном такие вещи, как `Client: gotNewMsg type M_TRANSACTION` и другие, как они появляются повсюду. До сих пор я в основном ищу сообщения, отличные от них, и ссылаются на конкретные объекты (но я не знаю, как они названы, боюсь, это тоже отчасти догадывается) Qohelet 6 лет назад 0
В таком случае, почему бы вам не начать * исключать * строки? Завершите свою командную строку чем-то вроде `..... | grep -v 'not_this \ | nor_this \ | nor_this'`, то есть `... | grep -v 'Клиент: получен NewMsg тип M_TRANSACTION'` gmelis 6 лет назад 0

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