Как искать текст 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} - строка, которая соответствует:
    1. Начало строки (^) с последующим
    2. Любое количество цифр (\d+) с последующим
    3. Точка и любое количество цифр (\.\d+) повторил 3 раза ({3})
  • sort сортирует вход
  • uniq -c печатает количество уникальных записей в отсортированном вводе
Другие вопросы по тегам