Как искать текст 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
печатает количество уникальных записей в отсортированном вводе