URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7345
[ Назад ]

Исходное сообщение
"Как правильно обработать строку в shell"

Отправлено stmw00d00 , 02-Май-08 17:16 
Скрипту передается переменная вида "83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255". Как правильно выдрать из этой строки последний айпишник без маски?

Содержание

Сообщения в этом обсуждении
"Как правильно обработать строку в shell"
Отправлено angra , 02-Май-08 22:28 
Например так:
$ echo "83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255"| cut -d ';' -f 3| cut -d '/' -f 1
83.69.13.3

"Как правильно обработать строку в shell"
Отправлено jd2 , 03-Май-08 12:22 
Для произвольного числа пар:

$ echo "83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255" | sed 's#.*;\([^;]\+\)$#\1#; s#^\([^/]\+\)/[^/]\+$#\1#'
83.69.13.3
$ echo "83.69.13.3/255.255.255.255" | sed 's#.*;\([^;]\+\)$#\1#; s#^\([^/]\+\)/[^/]\+$#\1#'
83.69.13.3


"Как правильно обработать строку в shell"
Отправлено angra , 03-Май-08 13:12 
Ну если уже извращаться, то можно и так:

$ perl -pe '$_=(reverse(split(/[;\/]/)))[1]."\n"' <<eof
> 83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255
> 83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255
> 83.69.13.1/255.255.255.255
> eof

83.69.13.3
83.69.13.2
83.69.13.1

Можно еще и лишние поубирать, сократив до $_=(reverse split "[;/]")[1] или даже @a=split"[;/]";$_=$a[@a-2]

Ну и напоследок можно вообще обойтись башем:
a="83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255";b=${a##*;}; echo ${b%/*}
83.69.13.3


"Как правильно обработать строку в shell"
Отправлено L0n3R4ng3r , 03-Май-08 22:19 
>Скрипту передается переменная вида "83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255". Как правильно выдрать из этой строки последний
>айпишник без маски?

или через awk :

#echo "83.69.13.1/255.255.255.255;83.69.13.2/255.255.255.255;83.69.13.3/255.255.255.255" | awk -F"/" '{print $2}'

к сожалению нету возможности проверить на живой системе, если не заработает заекранируй бек слеш