The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Bash и IP regexp"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 21-Сен-11, 08:12 
Есть у меня задача - надо файл содержащий в троках ip адреса распарсить.
Файл содержит такие строки:

ABC.DEF.123.222.111.32
qwerty-ab-1.222.155.211.110
ip_160.134.54.132_255.255.255.255
aabd-exx3.revb.139.222.176.82.
sysmon1-new.aaa.90.211.111.222.

Нужно отсюда выдрать адреса.

Моего ума хватило на такое "grep -E '([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5]))' iplist.txt"
Но вывод корректен не для всех адресов.
Может кто с перлом поможет?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Bash и IP regexp"  +1 +/
Сообщение от Andrey Mitrofanov on 21-Сен-11, 09:22 
>[оверквотинг удален]
> Файл содержит такие строки:
> ABC.DEF.123.222.111.32
> qwerty-ab-1.222.155.211.110
> ip_160.134.54.132_255.255.255.255
> aabd-exx3.revb.139.222.176.82.
> sysmon1-new.aaa.90.211.111.222.
> Нужно отсюда выдрать адреса.
> Моего ума хватило на такое "grep -E '([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5])).([1-9]|(1[0-9]|2[0-2]|3[0-5]))'
> iplist.txt"
> Но вывод корректен не для всех адресов.

=  =  =  8<  =  =  =
#"Учись, студент!"(с)
oct="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

>ip=`echo $ip | grep -o -e "[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}.[[:digit:]]\{1,3\}"`

# ..."космические корабли бороздят просторы Большого театра"...
ip2="`echo "$ip"|egrep -o "^$oct\.$oct\.$oct\.$oct$"`"
=  =  =  >8  =  =  =

http://opennet.ru/openforum/vsluhforumID9/7785.html#9

И кстати, ключ -o grep-а может быть полезен в такой ситуации.

> Может кто с перлом поможет?

Может. Там же выше есть какие-то ссылки.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 21-Сен-11, 12:55 
Спасибо за помощь.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 22-Сен-11, 07:39 
Не пойдет. Думается bash тут не сможет ничего сделать. Надо что-нибудь серьезное для парсинга. Скорее всего надо будет заюзать перл.
Не линканете че-нить дельное?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Bash и IP regexp"  +/
Сообщение от Andrey Mitrofanov on 22-Сен-11, 09:47 
> Не пойдет. Думается bash тут не сможет ничего сделать.

Да, щаззз....

$ cat rxip
#!/bin/bash

data() {
cat <<EOD
ABC.DEF.123.222.111.32
qwerty-ab-1.222.155.211.110
ip_160.134.54.132_255.255.255.255
aabd-exx3.revb.139.222.176.82.
sysmon1-new.aaa.90.211.111.222.
EOD
}

oct="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
iprx="($oct\.$oct\.$oct\.$oct)(.*)\$"


data | while read ll; do
echo "** "$ll
  while [[ "$ll" =~ $iprx ]]; do
    ip="${BASH_REMATCH[1]}"
    ll="${BASH_REMATCH[6]}"

    echo "$ip"
    done
  done
$ ./rxip
** ABC.DEF.123.222.111.32
123.222.111.3
** qwerty-ab-1.222.155.211.110
1.222.155.2
** ip_160.134.54.132_255.255.255.255
160.134.54.1
255.255.255.2
** aabd-exx3.revb.139.222.176.82.
139.222.176.8
** sysmon1-new.aaa.90.211.111.222.
90.211.111.2
$ _


>Надо что-нибудь серьезное для парсинга.

Купи себе книжку по бизону и теории компиляторов. Dragon Book отличный тяжёлый кирпич!

> Скорее всего надо будет заюзать перл. Не линканете че-нить дельное?

Смысл линковать??
=
> Может кто с перлом поможет?

Может. Там же выше есть какие-то ссылки.
=

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 23-Сен-11, 00:38 

> Да, щаззз....

А такое как вы объясните?
"** qwerty-ab-1.222.155.211.110
1.222.155.2"

Вы сами читаете то, что пишете?

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

9. "Bash и IP regexp"  +/
Сообщение от Andrey Mitrofanov on 23-Сен-11, 10:33 
>> Да, щаззз....
> А такое как вы объясните?

"Даю научное объяснение: бывает."(ц)

> "** qwerty-ab-1.222.155.211.110
> 1.222.155.2"
> Вы сами читаете то, что пишете?

Ни-ког-да!

$ diff -u rxip rxip1
--- rxip        2011-09-22 09:42:26.951679934 +0400
+++ rxip1       2011-09-23 10:21:17.192179505 +0400
@@ -10,7 +10,7 @@
EOD
}

-oct="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
+oct="(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9])"
iprx="($oct\.$oct\.$oct\.$oct)(.*)\$"


$ diff -u <( ./rxip ) <( ./rxip1 )
--- /dev/fd/63  2011-09-23 10:23:03.995679806 +0400
+++ /dev/fd/62  2011-09-23 10:23:03.995679806 +0400
@@ -1,11 +1,11 @@
** ABC.DEF.123.222.111.32
-123.222.111.3
+123.222.111.32
** qwerty-ab-1.222.155.211.110
-1.222.155.2
+1.222.155.211
** ip_160.134.54.132_255.255.255.255
-160.134.54.1
-255.255.255.2
+160.134.54.132
+255.255.255.255
** aabd-exx3.revb.139.222.176.82.
-139.222.176.8
+139.222.176.82
** sysmon1-new.aaa.90.211.111.222.
-90.211.111.2
+90.211.111.222
$ _

И да, :) 1.222.155.211 -- таки настоящий ip адрес.

Дальше - меняй постановку задачи (или повторно доводо до). Например, самые правые 4 октета или перед первым октетом не минус, или перед первым только точка, или... Кто тут :-P заказчик?
                                        

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

10. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 23-Сен-11, 14:44 
Настоящий-то он может настоящий, но вы же видите что на входе, и что передняя единица должна фильтроваться.

Я не заказчик, я попросил бы :)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

8. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 23-Сен-11, 01:32 
Подумал я сделать так: заменить точки на пробелы (sed 's/\./ /g' $1 | grep -v :), чтобы можно было отфильтровать столбцы содержащие только! цифры. Чтобы без тире всяких. awk должно с этим справиться.

И еще, надо бы маски отфильтровать, то есть все что имеет в первых двух октетах 255.

Что скажете?

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "Bash и IP regexp"  +/
Сообщение от x6e6564 on 22-Сен-11, 22:56 
как то так:
cat /tmp/qwe | sed -n 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/\n&\n/gp'|grep -v "^255\." |grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
123.222.111.32
1.222.155.211
160.134.54.132
139.222.176.82
90.211.111.222
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 23-Сен-11, 00:39 
Неа, не так. Не пойдет. "1.222.155.211" это как называется?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

11. "Bash и IP regexp"  +/
Сообщение от x6e6564 on 23-Сен-11, 18:02 
> Неа, не так. Не пойдет. "1.222.155.211" это как называется?

Ну дык, не заметил.

для данного условия вроде этого хватает..

cat /tmp/qwe | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/\n&/g' | sed 's/[^0-9]\{1,\}$//' | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$/\n&/' | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sed '/^255\./d'

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Bash и IP regexp"  +/
Сообщение от jedi email on 02-Окт-11, 15:36 
Да не парься ты так, пусть товарищь подождёт волшебного перл скрипта с подключенным libastral
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Bash и IP regexp"  +/
Сообщение от x6e6564 on 02-Окт-11, 22:57 
> Да не парься ты так, пусть товарищь подождёт волшебного перл скрипта с
> подключенным libastral

Бомр-у делать нечего, хоть какое-то развлечение =)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Bash и IP regexp"  +/
Сообщение от kamenniygorets (ok) on 06-Окт-11, 06:30 
Спасибо. Все как надо отфильтровалось.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

15. "Bash и IP regexp"  +/
Сообщение от izvorot email(??) on 06-Окт-11, 09:47 
> Спасибо. Все как надо отфильтровалось.

Ну а написать чем отфильтровалось???

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру