Выделить ip адрес и номер порта в переменные

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

vlad001
Сообщения: 29

Выделить ip адрес и номер порта в переменные

Сообщение vlad001 » 20.11.2017 22:52

Здравствуйте! Есть строки вида [2a02:7aa0:1201::f60e:2719]:443, 89.111.13.60:443, т.е. ip адрес 4-й и 6-й версий и номер порта. Можно ли при помощи awk или sed или ещё какой утилиты соответственно отделить часть с ip и номером порта? Т.о. должно получиться [2a02:7aa0:1201::f60e:2719], 89.111.13.60 и два 443. Регулярное выражение я нашёл

Код: Выделить всё

(([A-f0-9:]+:+)+[A-f0-9]+]):(\d+)|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):(\d+)
Т.к. в тексте будут только ip сформированные правильно, его должно хватить. После захвата получаются искомые ip в $1 и $4 и порт $3 и $5 (https://regex101.com/r/8JvNPe/2). Проблема как их дальше использовать?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15527
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Выделить ip адрес и номер порта в переменные

Сообщение Bizdelnick » 21.11.2017 00:08

vlad001 писал(а):
20.11.2017 22:52
Проблема как их дальше использовать?

То есть Вы получили значения, но не знаете, что с ними делать дальше? Зачем тогда Вы их получали?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Vascom
Сообщения: 1460
ОС: Fedora 30

Re: Выделить ip адрес и номер порта в переменные

Сообщение Vascom » 21.11.2017 09:29

vlad001 писал(а):
20.11.2017 22:52
Проблема как их дальше использовать?

Вы хотите знать как использовать переменные в bash?
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 266
ОС: OpenBSD

Re: Выделить ip адрес и номер порта в переменные

Сообщение nerve » 21.11.2017 10:20

Shell

$ cat ip_mask.sh #!/bin/bash a="[2a02:7aa0:1201::f60e:2719]:443, 89.111.13.60:443," ipv6=$(echo "$a" | awk '{print $1}' | sed 's/^\[\(.*\)\].*/\1/') ipv6_port=$(echo "$a" | awk '{print $1}' | sed 's/^.*\]:\([0-9]*\),/\1/') ipv4=$(echo "$a" | awk '{print $2}' | awk -F: '{print $1}') ipv4_port=$(echo "$a" | awk '{print $2}' | sed 's/^.*:\([0-9]*\),/\1/') echo "Sorce string: $a" echo -e "IPv6: $ipv6\nIPv6_port: $ipv6_port" echo -e "IPv4: $ipv4\nIPv4_port: $ipv4_port" echo -e "\nRead from file:\n" while read -r line; do ipv6=$(echo "$line" | awk '{print $1}' | sed 's/^\[\(.*\)\].*/\1/') ipv6_port=$(echo "$line" | awk '{print $1}' | sed 's/^.*\]:\([0-9]*\),/\1/') ipv4=$(echo "$line" | awk '{print $2}' | awk -F: '{print $1}') ipv4_port=$(echo "$line" | awk '{print $2}' | sed 's/^.*:\([0-9]*\),/\1/') echo -e "IPv6: $ipv6\nIPv6_port: $ipv6_port" echo -e "IPv4: $ipv4\nIPv4_port: $ipv4_port" done < ip_mask_file.txt $ cat ip_mask_file.txt [1a02:7aa0:1201::f60e:2719]:443, 89.111.13.60:443, [2a02:7aa0:1201::s60e:2719]:543, 89.111.14.60:444, [3a02:7aa0:1201::g60e:2719]:343, 89.111.15.60:440, [4a02:7aa0:1201::h60e:2719]:243, 89.111.16.60:441, [5a02:7aa0:1201::i60e:2719]:143, 89.111.17.60:442, $ ./ip_mask.sh Sorce string: [2a02:7aa0:1201::f60e:2719]:443, 89.111.13.60:443, IPv6: 2a02:7aa0:1201::f60e:2719 IPv6_port: 443 IPv4: 89.111.13.60 IPv4_port: 443 Read from file: IPv6: 1a02:7aa0:1201::f60e:2719 IPv6_port: 443 IPv4: 89.111.13.60 IPv4_port: 443 IPv6: 2a02:7aa0:1201::s60e:2719 IPv6_port: 543 IPv4: 89.111.14.60 IPv4_port: 444 IPv6: 3a02:7aa0:1201::g60e:2719 IPv6_port: 343 IPv4: 89.111.15.60 IPv4_port: 440 IPv6: 4a02:7aa0:1201::h60e:2719 IPv6_port: 243 IPv4: 89.111.16.60 IPv4_port: 441 IPv6: 5a02:7aa0:1201::i60e:2719 IPv6_port: 143 IPv4: 89.111.17.60 IPv4_port: 442

Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 748
ОС: RfRemix

Re: Выделить ip адрес и номер порта в переменные

Сообщение s.xbatob » 21.11.2017 11:22

А использовать bash обязательно? Не самый подходящий инструмент для вашей задачи.
Спасибо сказали: