Как искать текст ASCII с помощью терминала Ubuntu
У меня есть файл, в котором, когда я использую file myFile Я вернулся myFile: ASCII text, with very long lines
Затем я продолжил открывать его как файл.txt, и он открывается в блокноте как множество IP-адресов. Например 127.0.0.1 - - [20/Feb/2014:19:35:31 -0700] "GET /favicon.ico HTTP/1.1" 404 6008 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:27.0) Gecko/20100101 Firefox/27.0"и так далее для разных линий.
Есть ли способ поиска по этому тексту ASCII, чтобы найти уникальные IP-адреса и который имеет наибольшее количество "хитов"? У меня проблемы с поиском команд такого типа, так как я даже не уверен, что должен открыть их в файле.txt.
1 ответ
Решение
Ты можешь использовать grep извлечь IP-адреса, и sort + uniq посчитать количество попаданий:
grep -Po '^\d+(\.\d+){3}' filename | sort | uniq -c
grepиспользуется для поиска текста, соответствующего регулярному выражению-oпечатает только текст, который соответствует выражению, а не всю строку-Pразрешает регулярные выражения в стиле Perl^\d+(\.\d+){3}- строка, которая соответствует:- Начало строки (
^) с последующим - Любое количество цифр (
\d+) с последующим - Точка и любое количество цифр (
\.\d+) повторил 3 раза ({3})
- Начало строки (
sortсортирует входuniq -cпечатает количество уникальных записей в отсортированном вводе