Intereting Posts
UNIX Seconds, TAI (SI) Секунды, Секунды и Кодекс реального мира Сортировка IP-адресов, связанных со строкой в ​​файле txt в linux работает как команда, но не как сценарий оболочки. Зачем? Как я могу показать cd каталог, в который он переключается? команда linux для проверки очереди сообщений POSIX Попытка локальных ключей SSH перед агентом Драйвер Debian, необходимый для контроллера ввода-вывода Intel ICH7M SouthBridge Как установить хранилища CentOS-хранилищ? Сортировка по 2 полям в ksh сообщения журнала postfix: ошибка поиска RBL: имя хоста или домена не найдено запуск командной строки matlab на экране – не может быть введен после повторной привязки Что значит `. / path / command` do? (Пространство после точки, абсолютный путь) Невозможно выполнить печать из fluxbox, если я не впервые вхожу в систему с другим WM Как автоматически запускать и выключать машины VirtualBox? назначение переменной из сценария bash

Как скопировать строки access.log по времени?

У меня огромный веб-сервер access.log в CentOS. Я обращаюсь к нему через удаленный VPN, поэтому я не могу скопировать файл или прочитать его напрямую.

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

10.255.16.203 - - [26/Mar/2014:16:35:13 +0000] 

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

Команда grep предназначена для отображения только совпадающих строк данных файлов. С помощью опции -C можно отображать не только соответствующие линии (линии), но и некоторые строки до и после нее.

Итак, чтобы иметь 3 строки до и после строки, которую вы хотите:

 $ grep -C 3 "26/Mar/2014:16:35:13 +0000" access.log 

Вы также можете точно настроить количество строк, отображаемых после и / или перед соответствующими линиями, с параметрами -A и -B . На самом деле -C 3 совпадает с -A 3 -B 3 .

Если имеется более одной подходящей строки, grep отобразит 3 строки до и после блока согласованных строк.

Пример:

 $ grep -C 3 "25/Mar/2014:10:40:59 +0100" access.log 10.0.0.44 - httpuse [25/Mar/2014:09:41:17 +0100] "GET /dummy/BIGDummy_133644_1565_DL.xml.gz HTTP/1.1" 200 507 "-" "-" 10.0.0.43 - httpuse [25/Mar/2014:09:59:51 +0100] "GET /dummy/BIGDummy_133647_48267_DL.xml.gz HTTP/1.1" 200 1677 "-" "-" 10.0.0.44 - httpuse [25/Mar/2014:10:40:42 +0100] "GET /dummy/BIGDummy_133664_39603_DL.xml.gz HTTP/1.1" 200 1677 "-" "-" 10.0.0.40 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133664_DL.xml.gz HTTP/1.1" 200 60142 "-" "-" 10.0.0.41 - httpuse [25/Mar/2014:10:40:59 +0100] "GET /dummy/BIGDummy_133667_23124_DL.xml.gz HTTP/1.1" 200 5202 "-" "-" 10.0.0.40 - httpuse [25/Mar/2014:10:43:09 +0100] "GET /dummy/BIGDummy_133668_46_DL.xml.gz HTTP/1.1" 200 445 "-" "-" 10.0.0.42 - httpuse [25/Mar/2014:10:43:10 +0100] "GET /dummy/BIGDummy_133668_4116_DL.xml.gz HTTP/1.1" 200 597 "-" "-" 10.0.0.40 - httpuse [25/Mar/2014:10:43:13 +0100] "GET /dummy/BIGDummy_133665_DL.xml.gz HTTP/1.1" 200 57902 "-" "-" 

От man grep :

 NAME grep, egrep, fgrep - print lines matching a pattern SYNOPSIS grep [options] PATTERN [FILE...] DESCRIPTION Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN. By default, grep prints the matching lines. OPTIONS -A NUM, --after-context=NUM Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of matches. -B NUM, --before-context=NUM Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches. -C NUM, --context=NUM Print NUM lines of output context. Places a line containing -- between contiguous groups of matches.