Хвост файла для определенного текста

Есть ли команда Linux, похожая на хвост, где вместо указания нескольких строк вы можете указать строку текста, файл будет искать этот текст из последней строки в первую, а затем отображать все или указанные номера строк после этого ? Содержимое в конце журнала, которое я пытаюсь захватить, может варьироваться от 0 до 10 строк, поэтому, когда это не 10, он делает файл журнала, который я его скопировал, чтобы понять.

С man-страницы tail я вижу возможность указывать только строки или байты.

5 Solutions collect form web for “Хвост файла для определенного текста”

указать строку текста, а затем отобразить все строки после этого

Вот некоторые поддельные данные для игры:

$ seq 100 > input 

… и здесь я ищу строку «90» и отображаю все после нее (до конца файла):

 $ sed -n '/90/,$p' input 90 91 92 93 94 95 96 97 98 99 100 

Если вы хотите более гибкое решение, используйте переменную, измените котировки sed (и уберите $ из оболочки, для sed):

 $ t=96 $ sed -n "/$t/,\$p" input # or $ sed -n /$t/,\$p input 96 97 98 99 100 

Вы можете использовать эту retail команду: https://github.com/mwh/retail

Он поддерживает регулярные выражения для запуска и остановки вывода, поэтому вы, вероятно, хотите что-то вроде:

 retail -r STARTPATTERN mylogfile retail -r STARTPATTERN -u ENDPATTERN -f mylogfile 

Параметр -r явно находит последний экземпляр шаблона, который обычно вы хотите.

См. Также: https://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found

Вот пример использования журнала ошибок Apache, когда Apache был перезапущен несколько раз, используя retail чтобы извлечь только окончательный перезапуск:

 $ grep -c "Apache.*resuming normal operations" /var/web/logs/error.log 8 $ retail -r "Apache.*resuming normal operations" /var/web/logs/error.log [Wed Jul 6 17:12:55.534567 2016] [mpm_prefork:notice] [pid 17965] AH00163: Apache/2.4.4 (Unix) OpenSSL/1.0.1e configured -- resuming normal operations [Wed Jul 6 17:12:55.534582 2016] [mpm_prefork:info] [pid 17965] AH00164: Server built: Mar 26 2016 12:22:17 [Wed Jul 6 17:12:55.534598 2016] [core:notice] [pid 17965] AH00094: Command line: '/usr/local/apache2/bin/httpd' 

Или вы можете использовать регулярное выражение "(SIGTERM.* shutting down|SIGHUP.*restart)" чтобы показать все после последней попытки завершения или перезапуска.

Если ваш grep имеет флаг -A для отображения определенного количества строк контекста после каждого совпадения, вы можете сделать следующее:

 grep -A 10 'pattern' logfile | less 

Редактор ed имеет возможность поиска назад для предыдущего появления регулярного выражения – и удобно устанавливает свой текущий адрес в последнюю строку файла при открытии. Таким образом, вы могли бы сделать

 ed file ?string?,.p q . ed file ?string?,.p q 

для вывода строк из последнего вхождения string в конец файла (включительно) – или, как однострочный

 printf '?string?,.p\nq' | ed -s file 

Просто для полноты, я буду использовать решение с помощью awk – в то время как вам это не нужно для этой конкретной задачи, это очень мощный инструмент, и это та проблема, которую это хорошо решать.

 awk '/pattern/{x=1}x{print}' 

Это устанавливает переменную x когда шаблон найден и печатает строку всякий раз, когда x является истинным. Обратите внимание, что это начинается с первого появления шаблона.

  • Как выйти из режима `tail -f` без использования` Ctrl + c`?
  • Использование опции less's show show line
  • Что делает tail -f <имя_каталога>?
  • tail -f, без использования опроса
  • Есть ли способ использовать хвост, чтобы заставить его указывать количество строк без использования кота?
  • эхо-строки файла - но не более N символов в строке
  • Хвост -f ломается, когда файл усечен
  • Использовать хвост и grep для отправки IRC-сообщения?
  • Горячая запись EOF в файл, чтобы остановить любые процессы хвоста
  • Получить последнюю строку вывода `df`
  • multitail - настраиваемая конфигурация (multitail.conf)
  • Interesting Posts

    Заменить только на первую совпадающую строку с sed

    Как заменить «базовую системную оболочку» на IPython?

    Shell Script выдает ошибку при запуске программы на C ++

    Пересылка X11 через SSH

    При использовании linux acl mkdir и mkdir -p делают разные вещи

    Как возобновить видеоролики YouTube в VLC?

    Как разрешить сетевому менеджеру повторять попытку подключения DSL до тех пор, пока он не будет выполнен?

    Как рекурсивно изменять разрешения для всех каталогов внутри текущего каталога?

    Получить имя файла сфокусированного окна в xmonad

    По-прежнему запрашивается пароль после создания ключей авторизации

    Рабочий стол полностью замерзает при операциях ввода / вывода

    PulseAudio не загружает модуль-туннель-приемник

    Как добавить тему gtk2 в KDE?

    Sudo больше недоступен, и пользователи не могут устанавливать или изменять большинство файлов

    ping: неизвестный хост с включенным iptables

    Linux и Unix - лучшая ОС в мире.