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

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

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

[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 

  • Является ли он переносимым аргументом команды «i»?
  • извлекать линии в соответствии с конкретным столбцом
  • sed для сопоставления между совпадающими фигурными фигурными скобками
  • Как вставить строку в текстовый документ прямо перед строкой, содержащей некоторый текст в bash?
  • Извлечь строки, которые имеют конкретное окончание, и использовать их для извлечения из другого файла
  • команда sed для замены строки
  • извлекать текст между двумя разными совпадениями
  • Как добавить атрибут в тег в файле XML по командной строке?
  • 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 - лучшая ОС в мире.