Intereting Posts
Лучший способ работы / отображения дерева изображений, отсортированных по размеру Подключите мой ноутбук через рабочий стол к Интернету Почему лучше использовать 64-битную ОС? Почему исполняемые файлы разделяемых библиотек? Сценарий Bash для копирования определенных каталогов с сопоставлением с образцом Проблема с openSSL 1.0.2, работающая с CentOS 5.11 Как подключить USB-микрофон к выходу по умолчанию в Alsa? Форматирование btrfs для надежных метаданных Как запустить приложение GUI на X11-сервере удаленного сервера через SSH getpriority возвращает различное значение для разных хостов с одинаковой версией ядра Сеть CentOS 7 с объединенным мостом работает только на одном сетевом адаптере как перечислять все запросы epoll в linux Использовать каталог Linux в качестве устройства USB-OTG для Android-телефона? Указать конкретную опцию из ответа в dhclient Невозможно использовать `cut -c` (` –characters`) с UTF-8?

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 

Очень простое решение с использованием 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