Похоже, что на этот вопрос фактически был дан ответ в этом другом вопросе , но он устарел, поэтому вот текущее решение:
Это включает в себя передачу вашего локального каталога после вашего «Pass 1» в wget
, чтобы заставить его поверить, что это веб-сайт. Это легко сделать с помощью короткого кода Python, вызывающего SimpleHTTPRequestHandler , а затем вы-wget
с локального хоста с соответствующими параметрами.
Что-то в этом роде может работать :
import http.server
import socketserver
import os
PORT = 8000 # optional, can be changed
web_dir = os.path.join(os.path.dirname(path), 'web') # change path to your local files here if needed, like '/home' or 'C:\\tmp' on Windows
os.chdir(web_dir)
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
тогда ваш wget
может быть вызван наhttp://localhost:8000
Это похоже на стандартный журнал HTTP-доступа, так почему бы не использовать grep
для сопоставления с шаблоном нужных вам дат?
$ grep '1[0-3]/Aug/2020' access_log
10.434.22.334 - unauthenticated 10/Aug/2020:23:45:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 10/Aug/2020:23:45:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 11/Aug/2020:23:34:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 12/Aug/2020:23:45:43 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 13/Aug/2020:23:43:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
Шаблон grep '1[0 -3]/август/2020' использует выражение диапазона [0 -3]. Это выражение соответствует одному символу, который может принимать значения 0,1,2,3. Объедините это с остальной частью выражения, и вы получите 10 августа 2020 г., 11 августа 2020 г., 12 августа 2020 г. и 13 августа 2020 г. в качестве возможных шаблонов. grep
распечатает строки из журнала, соответствующие этим шаблонам.
Вы можете использовать специализированный инструмент структурированного текста, например Miller (https://github.com/johnkerl/miller), и запустить
mlr --nidx then filter 'strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") >="2020-08-11" && strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") <="2020-08-13"' input.txt
иметь
10.434.22.334 - unauthenticated 11/Aug/2020:23:34:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 12/Aug/2020:23:45:43 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
10.434.22.334 - unauthenticated 13/Aug/2020:23:43:45 +0800 "GET /eai/random.jsp HTTP/1.1" 200 74
Я применил фильтр, чтобы получить все значения между 2020-08-11
и2020-08-13
Некоторые примечания:
--nidx
для установки формата ввода и вывода(https://bit.ly/3h3UvN3)filter
применить фильтр; strftime(strptime($4,"%d/%b/%Y:%H:%M:%S"),"%Y-%m-%d") >="2020-08-11"
— один из фильтров. С помощью strptime
я установил формат ввода даты(%d/%b/%Y:%H:%M:%S
)четвертого поля ($4
). Используя strftime
, я изменяю формат даты в %Y-%m-%d