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

Исходное сообщение
"Преобразовать ip в 4 цифры"

Отправлено Halyva , 14-Май-05 15:05 
В awk есть функция plit. В неё задаёш строку, разделатель и массив. если написать в неё split(str,arr,'.') и передать str='192.168.2.67' то значением arr будет массив длинной 4 и 1 элемент 192 второй 168 и т.д. Как тоже самое сделать только в shell?
Или просто как нибудь вырезать цифры до точки.

Содержание

Сообщения в этом обсуждении
"Преобразовать ip в 4 цифры"
Отправлено Maxim Kuznetsov , 14-Май-05 15:20 
>В awk есть функция plit. В неё задаёш строку, разделатель и массив.
>если написать в неё split(str,arr,'.') и передать str='192.168.2.67' то значением arr
>будет массив длинной 4 и 1 элемент 192 второй 168 и
>т.д. Как тоже самое сделать только в shell?
>Или просто как нибудь вырезать цифры до точки.
sed :
# echo 192.168.1.1 | sed "/s/([^\\.])/\\1/"
или упомянутый Вами awk - что мешает вызвать awk из шела ?



"Преобразовать ip в 4 цифры"
Отправлено Halyva , 14-Май-05 15:25 
>или упомянутый Вами awk - что мешает вызвать awk из шела ?
Слишком часто и слишком много надо раз. Иррационально.



"Преобразовать ip в 4 цифры"
Отправлено Halyva , 14-Май-05 15:30 
А чем sed от awk отличается? Что awk что sed потоковые редакторы :)

"Преобразовать ip в 4 цифры"
Отправлено madskull , 14-Май-05 16:02 
>В awk есть функция plit. В неё задаёш строку, разделатель и массив.
>если написать в неё split(str,arr,'.') и передать str='192.168.2.67' то значением arr
>будет массив длинной 4 и 1 элемент 192 второй 168 и
>т.д. Как тоже самое сделать только в shell?
>Или просто как нибудь вырезать цифры до точки.


str='192.168.2.67'
IFS='.' a=($str)
теперь в массиве а отдельные числа
echo ${a[@]}

только не забудьте сохранить/восстановить значение IFS


"Преобразовать ip в 4 цифры"
Отправлено madskull , 14-Май-05 16:07 
>
>str='192.168.2.67'
>IFS='.' a=($str)
>теперь в массиве а отдельные числа
>echo ${a[@]}
>
>только не забудьте сохранить/восстановить значение IFS

А еще лучше вот так
a=(${str//./ })
echo ${a[@]}