sed match word1 и word2, чтобы получить слово между ними

У меня возникли проблемы с попыткой вытащить ip-адрес в наш полный файл журнала.

Вот как выглядит строка в файле

  • Команда Awk против Grep
  • Измените одиночные пустые строки, чтобы удвоить пустые строки, используя awk
  • добавить текст в строку перед матчем
  • Найти первое появление каждого из этих шаблонов с помощью grep
  • Группируйте все строки на основе первого столбца, затем вычислите общее количество второго и третьего столбцов
  • Получить весь список файлов за последние 5 секунд
  • [2016-11-10 11:22:42] УВЕДОМЛЕНИЕ [24518] chan_sip.c: Регистрация с '' 100 '' не удалась для '62 .210.189.39: 6584 '- Неверный пароль

    Мне просто нужен ip-адрес между ' и :

    Ниже моя попытка и получить это, чтобы вытащить ip

     sed -e "/failed[[:space:]]for[[:space:]]'*.*.*.*:*'/,/[[:space:]]-[[:space:]]Wrong[[:space:]]Password/p" full > output.txt 

  • Сравнение текстовых файлов с использованием Bash и AWK
  • AWK: разделитель полей
  • Сортировка по двум столбцам
  • Добавить строку во многие файлы
  • Скрипт, сравнивающий два файла, соответствует двум строкам в любой точке
  • Использование sed для добавления URL-адреса в начало каждой строки
  • 2 Solutions collect form web for “sed match word1 и word2, чтобы получить слово между ними”

    Очень простое решение с использованием cut

     cut -d \' -f 4 < full | cut -d : -f 1 > output.txt 62.210.189.39 

    Вам может потребоваться отфильтровать его до строкой « Wrong Password так что здесь тоже что-то есть.

     grep 'Wrong Password' full | cut -d \' -f 4 |cut -d : -f 1 > output.txt 

    Вот несколько более сложная версия, использующая sed

     sed -e "s/.*failed for '\([0-9\.]*\):.*/\1/" full > output.txt 

    Используйте группировку, чтобы вытащить IP-адрес в parens

    И просто для удовольствия я сделал один с perl

     perl -n -e "/failed for '([\d.]+):/ && print \$1 . \"\n\"" full > output.txt 

    Также здесь есть команда grep из комментариев по вопросу, который работал для меня.

     grep -oP '(\d{1,3}\.{1})+\d{1,3}' full > output.txt 

    Ты говоришь,

    Мне просто нужен ip-адрес между: и:

    Поэтому давайте использовать эти символы в качестве разделителей полей и выбрать IP-адрес:

     $ awk -F "[':]" '{ print $7 }' file 62.210.189.39 

    Если вы хотите ограничить вывод строк, содержащих, например, строку Wrong password :

     $ awk -F "[':]" '/Wrong password/ { print $7 }' file 

    При делении строки вверх на ' и : качестве разделителей полей вы получаете следующие поля:

     [2016-11-10 11:22:42] NOTICE[24518] chan_sip.c: Registration from '"100" ' failed for '62.210.189.39:6584' - Wrong password ^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^ field1 f2 field3 field4 field5 field6 field7 f8 field9 
    Linux и Unix - лучшая ОС в мире.