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 

  • Замена строки на основе номера строки
  • Найти шаблон и удалить его из всех файлов
  • Как удалить строку на основе Delimeter в perl / Shell?
  • Как добавить первую строку в конце каждой строки файла с помощью Sed?
  • Я хочу найти дубликаты в файле и добавить символ в конец строки в первом совпадении
  • Как извлечь определенные поля из строк с помощью команд оболочки?
  • Скажите выражение регулярного выражения, чтобы пропустить начало строки перед сопоставлением
  • Извлечение строк, содержащих PAT1, но не PAT2 с sed
  • 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 
    Interesting Posts

    копия в Linux работает не так, как ожидалось, с файлами bootrom

    Как переключиться с рабочего стола Ubuntu на сервер Ubuntu?

    Один слот для сортировки и uniq двух выходов

    Как скопировать строки из середины строк (между строками) до конца строк

    (Raspian) Условия запуска DHCP – много сбоев службы при запуске (без DNS в течение ~ 5-10 секунд)

    Вставить дату в ячейку в sc

    Nginx перенаправляет все домены на один веб-сайт

    История команд и каталогов, в которых мы находились

    Усекать при необходимости при перемещении файла в файловую систему с более коротким NAME_MAX

    Mount Samba Share (сервер Linux) на клиентской машине Linux

    Замедление процессора при его нагревании

    Как я могу дефрагментировать мой SSD на Linux?

    С помощью сценариев оболочки мне нужно объединить данные из двух файлов в один файл

    Передавать аргументы для функции точно как-есть

    PCM не влияет на громкость звука с помощью ALSA

    Linux и Unix - лучшая ОС в мире.