Страница 1 из 1

Помогите с регулярным выражением....

Добавлено: 2009-03-22 12:50:21
tango
К примеру есть некий текст, в котором нужно найти выражение "192.168.0.1" и развернуть последовательность символов , чтобы получилось "1.0.168.192". Простая замена не подходит, т.к. исходное выражение вносится в файл из переменной. Тоесть изначально что нужно "развернуть в обратную сторону" я не знаю....Надеюсь понятно объяснила.

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 12:54:12
Alex Keda
разбить по точкам на октеты и с ними работать...

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 12:57:18
ProFTP
почему простая замена не подходит

айпишники в тексте или просто айпи в переменной?

по-миму просто на перд

1) splite выод в массив
2) reverse сортировка в обратную сторону
3) join ('.', @массив); или через map

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 13:10:07
zg

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

zg# echo 192.168.0.1 | awk -F\. '{print $4"."$3"."$2"."$1}'
1.0.168.192
zg#

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 19:21:55
Гость
zg писал(а):

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

zg# echo 192.168.0.1 | awk -F\. '{print $4"."$3"."$2"."$1}'
1.0.168.192
это если точек всего четыре. Но если их количество не определено, то не подойдет. Придется искать другое решение, например

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

$ echo 192.168.0.1.001.10029.0292.2302.023 | awk -F. '{ for(i=NF; i>0; i--) s=s $i"." } END { sub("\.$", "", s); print s }'
023.2302.0292.10029.001.1.0.168.192
однако сие надо допилить, ибо как в ipv6, так и в ipv4 нули можно сокращать. Напр,
127.1 = 127.0.0.1
::1 = 0000:0000:0000:0000:0000:0000:0000:0001

Если топикстартеру попадется похожий адрес для обработки...

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 19:29:50
zg
Гость писал(а):Но если их количество не определено
и что? :smile: что мешает выбрать только те данные, в которых количество точек строго определено?
Гость писал(а):ибо как в ipv6, так и в ipv4 нули можно сокращать.
man 3 inet впрёд и с песней :smile: можно и по уму сделать, но ресурсозатраты будут другими, а результат таким же. Задача была чётко поставлена, про IPV6 и сокращения сказано не было :roll:

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 19:50:15
Гость
zg писал(а):
Гость писал(а):ибо как в ipv6, так и в ipv4 нули можно сокращать.
man 3 inet впрёд и с песней :smile:
sorry, моя телепатическая антенна не уловила хода твоих мыслей. Что я должен найти в inet(3)?
zg писал(а):можно и по уму сделать, но ресурсозатраты будут другими, а результат таким же. Задача была чётко поставлена, про IPV6 и сокращения сказано не было :roll:
задача как раз четко поставлена не была
tango писал(а):..развернуть последовательность символов , чтобы получилось "1.0.168.192". Простая замена не подходит, т.к. исходное выражение вносится в файл из переменной. Тоесть изначально что нужно "развернуть в обратную сторону" я не знаю....
лично я не совсем понял хода мыслей tango, мало контекста. Единственное, что четко задано "развернуть в обратную сторону" и дан всего лишь один пример. Там нет ни слова, что все данные будут касаться ipv4. А "исходное выражение вносится в файл из переменной" понятно лишь автору, у коего есть скрипт, выражение (регулярное?) и переменная.

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 20:00:58
zg
Гость писал(а):sorry, моя телепатическая антенна не уловила хода твоих мыслей.
гм.. при чём тут телепатия? там читать надо :smile:
Гость писал(а):Что я должен найти в inet(3)?
ну... там много чего полезного написано на тему ipv4, на тему ipv6 есть man 4 inet6
Гость писал(а):Там нет ни слова, что все данные будут касаться ipv4
ну да, про реализацию скрипта тоже ничего не сказано, так чего же ты на авк стал катать? следуя твоей логике катай уж на всех языках и под все платформы, а не только под юникс. Будь последователен :smile:

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 21:14:01
Alex Keda
авк есть под винду

Re: Помогите с регулярным выражением....

Добавлено: 2009-03-22 21:50:52
zg
lissyara писал(а):авк есть под винду
есть :smile:

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

C:\Documents and Settings\zg>gawk --version
GNU Awk 3.1.0
Copyright (C) 1989, 1991-2001 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

C:\Documents and Settings\zg>
но в авк нет функций для работы с айпи :pardon: поэтому изголяться и делать универсальный мегаскрипт на авк нет абсолютно никакого смысла - все функции для работы с ip давным давно реализованы на С.