регулярное выражение

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

регулярное выражение

Непрочитанное сообщение InventoR » 2010-06-14 10:26:57

Особо не сталкивался с регулярными выражениями, подскажите как записать в shell, posix
192.168.0-254.254
?
ну вот и сказочке конец, кто слушал, тот молодец.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: регулярное выражение

Непрочитанное сообщение Гость » 2010-06-14 16:24:39

в sh можно создать функцию range() и использовать как

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

$ range 192.168.0-254.254 | head -5
192.168.0.254
192.168.1.254
192.168.2.254
192.168.3.254
192.168.4.254
вот сама функция с примером использования на посл. строке

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

#! /bin/sh

range() {
    local IFS i prefix suffix from to
    IFS='.' set -- $1
    IFS=' ' set -- $1

    for p; do
        i=$((i + 1))
        case $p in
            *-*)
                prefix=$(while [ $((j+=1)) -lt $i ]; do
                    eval echo -n \$$j.
                done)

                suffix=$(while [ ${j=$((i+1))} -le $# ]; do
                    eval echo -n .\$$j
                    j=$((j + 1))
                done)

                from=${p%-*} to=${p#*-}
                while [ $from -le $to ]; do
                    echo $prefix$from$suffix
                    from=$((from + 1))
                done
                ;;
        esac
    done
}

range 192.168.0-254.254
А в bash и zsh еще проще

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

$ echo 192.168.{0..254}.254

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: регулярное выражение

Непрочитанное сообщение zg » 2010-06-20 19:33:18

InventoR писал(а):подскажите как записать в shell, posix
192.168.0-254.254
?
куда записать и с какой целью?

Аватара пользователя
InventoR
ст. лейтенант
Сообщения: 1344
Зарегистрирован: 2006-12-10 19:43:25
Контактная информация:

Re: регулярное выражение

Непрочитанное сообщение InventoR » 2010-06-20 23:28:15

syslog-ng
ну вот и сказочке конец, кто слушал, тот молодец.