Установите параметр команды sed для диапазона времени

Установите параметр команды sed для диапазона времени

Это мой пример файла журнала, который я хотел бы извлечь из очень большого файла журнала

2017-05-30 23:11:34,629 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking auth agent [accountName=rene1 remoteAddress=STEDGE/172.16.8.3]
2017-05-30 23:11:14,638 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: "rene1".
2017-05-30 23:10:54,663 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.KeyboardInteractiveAuthentication - SSH: Sent SSH_MSG_USERAUTH_INFO_REQUEST (Password Authentication): 
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - User login attempt has been made from address /172.16.8.1:58222
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking config agent [accountName=rene1 remoteAddress=/172.16.8.1]
2017-05-30 23:10:36,446 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Config agent success [accountName=rene1 remoteAddress=/172.16.8.1]



Я хотел бы извлечь весь кусок журнала из в 23:10:36с 23:11:34помощью sedно это не удалось. Я проверил grepи awkно нет надежды на мой ожидаемый результат. Это только дает мне журнал, произошедший с 23:10:36которым я не мой ожидаемый результат. Это моя команда

sed -n '/23:10:36/,/23:11:34/p' stlog.txt



Кто-нибудь знает, как это сделать? Он содержит только время без даты, потому что моя программа будет получать только текущее системное время и запрашивать базу журнала только по текущему системному времени.

решение1

Я вижу здесь две проблемы: 1) журнал, похоже, в обратном порядке, 2) у вас есть несколько строк, соответствующих шаблону «end».

(Хотя в последней строке указано 23:10:36,446, что позже, чем 23:10:36,415 в предпоследней строке)

При обратном порядке вы получите только совпадающие строки, 23:10:36поскольку sedначинает печать, когда видит это, и продолжает, пока не увидит 23:11:34, которого там нет.

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

sed -n '/23:11:34/,/23:10:36/p' stlog.txt

Вот awkрешение, которое должно помочь обойти эту проблему:

awk -vstart="23:11:34" -vend="23:10:36" \
  '$0 ~ start {p=1} $0 ~ end {e=1} e && $0 !~ end {p=0} p' stlog.txt 

Переменная pуправляет печатью и очищается только после того, как будет виден шаблон «конец» ( eравно 1).итекущая строка больше не соответствует этому шаблону.

Связанный контент