The OpenNET Project / Index page

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

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

"Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 09:43 
Здрасте всем!

Только начинаю осваивать unix, так что прошу ногами не пинать.
Не могу рассортировать файл. пробую при помощи шаблона, но результат не тот.
Есть file содержит ip адреса
192.168.1.6
192.168.1.13
192.168.1.31
192.168.1.45
192.168.1.65
192.168.1.100
192.168.10.3
192.168.10.5
192.168.10.6
192.168.10.10
192.168.10.11
192.168.10.27
192.168.10.34
192.168.10.41
192.168.10.63
192.168.10.82

Задача рассортировать ip по двум файлам содержащие только 92.168.1.ХХ и 92.168.10.XX
конструкция вида
cat file | grep '192\.168\.1\.' > file1
cat file | grep '192\.168\.10\.' > file2
приводит к

cat file1
192.168.1.6
192.168.1.13
192.168.1.31
192.168.1.45
192.168.1.54
192.168.1.55
192.168.1.63
192.168.1.65
192.168.1.100
192.168.1.140

и cat file2

192.168.10.3
192.168.10.5
192.168.10.6
192.168.10.7
192.168.10.10
192.168.10.11
192.168.10.22
192.168.10.26
192.168.10.27
192.168.10.30
192.168.10.34
192.168.10.36
192.168.10.38
192.168.10.40
192.168.10.41
192.168.10.61
192.168.10.63
192.168.10.81
192.168.10.82
192.168.10.200

Как правильно составить шаблон поиска?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

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


1. "Регулярные выражения"  
Сообщение от A on 31-Июл-07, 09:50 
>Задача рассортировать ip по двум файлам содержащие только 92.168.1.ХХ и 92.168.10.XX
>конструкция вида
>cat file | grep '192\.168\.1\.' > file1
>cat file | grep '192\.168\.10\.' > file2
>приводит к

не понял, вы нигде не напутали с 92/192?

>Задача рассортировать ip по двум файлам содержащие только 92.168.1.ХХ и 92.168.10.XX

grep '^92\.168\.1\.' file >file1
grep '^92\.168\.10\.' file >file2

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 10:14 
Да, извините! Очепятался.
Конечно, везде сеть вида 192.168.ХХ.ХХ
В общем рассортировать, чтобы в каждом файле были записи только относящиеся к одной сети.
но туда лезут левые ip адреса, которых в исходном файле нет.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Регулярные выражения"  
Сообщение от phpcoder email(??) on 31-Июл-07, 10:19 
[...]
>Задача рассортировать ip по двум файлам содержащие только 92.168.1.ХХ и 92.168.10.XX
>конструкция вида
>cat file | grep '192\.168\.1\.' > file1
>cat file | grep '192\.168\.10\.' > file2
>приводит к

[...]

У меня всё работает, как вас и нужно:

[c0der@rock ~/opennet]$ cat ips.txt
192.168.1.6
192.168.1.13
192.168.1.31
192.168.1.45
192.168.1.65
192.168.1.100
192.168.10.3
192.168.10.5
192.168.10.6
192.168.10.10
192.168.10.11
192.168.10.27
192.168.10.34
192.168.10.41
192.168.10.63
192.168.10.82
[c0der@rock ~/opennet]$ grep '192\.168\.1\.' ips.txt
192.168.1.6
192.168.1.13
192.168.1.31
192.168.1.45
192.168.1.65
192.168.1.100
[c0der@rock ~/opennet]$ grep '192\.168\.10\.' ips.txt
192.168.10.3
192.168.10.5
192.168.10.6
192.168.10.10
192.168.10.11
192.168.10.27
192.168.10.34
192.168.10.41
192.168.10.63
192.168.10.82
[c0der@rock ~/opennet]$

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 10:32 
Хз.. и у меня так работает, а вот в скрипте не хочет. :((
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Регулярные выражения"  
Сообщение от phpcoder email(??) on 31-Июл-07, 10:43 
>Хз.. и у меня так работает, а вот в скрипте не хочет.
>:((

Покажите скрипт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 10:48 
>У меня всё работает, как вас и нужно:

Уф-фф! Спасибо! Бывает достаточно этой строки, что бы привести себя в чувство! ну, конечно, все прекрасно рулит, я с путями у себя напутал!! запарился уже вконец, надо перерыв... :))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 13:34 
А как реализовать следующую задачу:
Есть файл с парами ip аnd mac разделенные табом
вида file1
192.168.XX.XX   aa:bb:cc:dd:ee:ff
192.168.XX.XX   bb:cc:dd:ee:ff:aa
и т.д.
и есть файл вида file2 (только с ip без mac)
192.168.ХХ.ХХ
192.168.ХХ.ХХ

Нужно из file1 вырезать строки совпадающие со строками из file2
Если бы оба файла были только из ip можно было бы реализовать это через comm
Но файлы разные

Вот пример file1
192.168.10.10   00:04:61:73:96:1b
192.168.10.11   00:1a:92:2e:ad:8a
192.168.10.22   00:e0:4d:04:1f:70
192.168.10.32   00:e0:4d:04:1f:73
192.168.10.33   00:0f:ea:86:7c:62
192.168.10.34   00:e0:4c:a0:b0:5f
192.168.10.36   00:0d:88:70:bf:06
192.168.10.41   00:16:76:43:4d:54
192.168.10.44   00:80:48:2f:b8:8e
192.168.10.45   00:e0:4c:3f:11:65
192.168.10.46   00:e0:4c:86:fa:1b
192.168.10.57   00:13:46:ec:f3:49
192.168.10.61   00:02:44:be:4b:3e
192.168.10.63   00:11:2f:9e:5d:24
192.168.10.69   00:04:61:7b:c4:64
192.168.10.100  00:11:5b:f8:2b:ff
192.168.10.111  00:80:48:48:5d:8f
192.168.10.220  00:14:85:21:1b:f7
192.168.10.221  00:04:61:6d:7f:5a
192.168.10.230  00:0f:ea:a4:f7:f5

file2
192.168.10.10
192.168.10.22
192.168.10.32
192.168.10.33

И если просто грепать, к примеру
cat file1 | grep -v -f file2
то на выходе получаем,
192.168.10.11   00:1a:92:2e:ad:8a
192.168.10.34   00:e0:4c:a0:b0:5f
192.168.10.36   00:0d:88:70:bf:06
192.168.10.41   00:16:76:43:4d:54
192.168.10.44   00:80:48:2f:b8:8e
192.168.10.45   00:e0:4c:3f:11:65
192.168.10.46   00:e0:4c:86:fa:1b
192.168.10.57   00:13:46:ec:f3:49
192.168.10.61   00:02:44:be:4b:3e
192.168.10.63   00:11:2f:9e:5d:24
192.168.10.69   00:04:61:7b:c4:64
192.168.10.111  00:80:48:48:5d:8f
192.168.10.230  00:0f:ea:a4:f7:f5

то есть режутся не только строки с 10 22 32 33 но и строки с 100, 220 (что в общем-то логично,но не допустимо по условию)
как указать, что строки должны быть абсолютно равны, что искать в file1 ТОЛЬКО строки из file2 абсолютно совпадающие, что очередная строка из file2 это и есть жесткий шаблон? Помогите, кто знает?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Регулярные выражения"  
Сообщение от phpcoder email(??) on 31-Июл-07, 14:59 
>А как реализовать следующую задачу:

[...]

Вот тут была очень похожая задача: http://www.opennet.me/openforum/vsluhforumID9/6632.html#0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Регулярные выражения"  
Сообщение от L0n3R4ng3r (??) on 31-Июл-07, 17:29 
>[оверквотинг удален]
>192.168.10.69   00:04:61:7b:c4:64
>192.168.10.111  00:80:48:48:5d:8f
>192.168.10.230  00:0f:ea:a4:f7:f5
>
>то есть режутся не только строки с 10 22 32 33 но
>и строки с 100, 220 (что в общем-то логично,но не допустимо
>по условию)
>как указать, что строки должны быть абсолютно равны, что искать в file1
>ТОЛЬКО строки из file2 абсолютно совпадающие, что очередная строка из file2
>это и есть жесткий шаблон? Помогите, кто знает?

приветси file2 к такому виду
192.168.10.10$
192.168.10.22$
192.168.10.32$
192.168.10.33$

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Регулярные выражения"  
Сообщение от L0n3R4ng3r (??) on 31-Июл-07, 17:36 
>[оверквотинг удален]
>192.168.10.69   00:04:61:7b:c4:64
>192.168.10.111  00:80:48:48:5d:8f
>192.168.10.230  00:0f:ea:a4:f7:f5
>
>то есть режутся не только строки с 10 22 32 33 но
>и строки с 100, 220 (что в общем-то логично,но не допустимо
>по условию)
>как указать, что строки должны быть абсолютно равны, что искать в file1
>ТОЛЬКО строки из file2 абсолютно совпадающие, что очередная строка из file2
>это и есть жесткий шаблон? Помогите, кто знает?

или как вариант

#! /bin/bash

for i in `cat file2`; do
    echo $i"$" > file2.tmp
done
cat file1 | grep -v -f file2.tmp
rm file2.tmp

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Регулярные выражения"  
Сообщение от phpcoder email(??) on 31-Июл-07, 17:48 
[...]
>Нужно из file1 вырезать строки совпадающие со строками из file2
>Если бы оба файла были только из ip можно было бы реализовать
>это через comm

[...]
>И если просто грепать, к примеру
>cat file1 | grep -v -f file2

[...]

У вас задание найти совпадающие IP-шники, а в команде вы ищете напротив -- несовпадющие (опция -v).

Короче, я почитал ман за вас и нашел то, что вам нужно:

[c0der@rock ~/opennet]$ grep -wf file2.txt -F ips.txt                                                      20:45
192.168.10.10   00:04:61:73:96:1b
192.168.10.22   00:e0:4d:04:1f:70
192.168.10.32   00:e0:4d:04:1f:73
192.168.10.33   00:0f:ea:86:7c:62
[c0der@rock ~/opennet]$

Hint: вам нужна опция -w (см. man grep(1))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Регулярные выражения"  
Сообщение от vic (??) on 31-Июл-07, 18:41 
$ join file1 file2

ы?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Регулярные выражения"  
Сообщение от mixa email(??) on 31-Июл-07, 23:33 
>$ join file1 file2
>
>ы?

Спасибо за подсказку, до джойна сам допер, без вранья. Да с join все было бы изящно и красиво. Но там есть одна неувязка. Если file1 начинается со строки отличной от первой строки в filt2 то есть не
192.168.10.10   00:04:61:73:96:1b
192.168.10.11   00:1a:92:2e:ad:8a
192.168.10.22   00:e0:4d:04:1f:70
а скажем
192.168.10.7    00:06:28:bc:64:6b
192.168.10.8    00:80:48:ce:ab:8a
192.168.10.9    4c:e0:4d:cd:1f:26
192.168.10.10   00:04:61:73:96:1b
192.168.10.11   00:1a:92:2e:ad:8a
192.168.10.22   00:e0:4d:04:1f:70
и т.д.
то с join file1 file2 не проходит.
решил тогда обрезать file1 до строки совпадающей с первой строкой file2 чтобы применить join и запнулся
Первую стороку file2 находим sed q file2 (получаем разумеется 192.168.10.9) а вот как передать ее в sed -n '/192.168.10.9/,$p' file1 вместо ip=192.168.10.9
пробовал sed -n '/`sed q file2`/,$p' file1 не прокатывает
Хотел уже через sed построчно с помощью цикла (построчный вывод
sed -n '1p' file2 - 1-я строка
sed -n '2p' file2 - 2-я строка и т.д.) читать file2 и делать выборку из file1
А тут глянул, столько решений накидали...
Спасибо, выручили
PS ну а это grep -wf file2.txt -F ips.txt ваще круто, в самую десятку.
man grep - да, это справедливое замечание, но маны на инглише пока тяжело даются, еще раз всем спаибо за оказанную помощь, я очень рад что мне помогали и помогли.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Регулярные выражения"  
Сообщение от vic (??) on 01-Авг-07, 13:01 
Чтобы юзать джойн резать ниче не надо, просто файлы должны быть отсортированы это раз и поля  для сравнения (в нашем случае IPадреса) должны быть отсортированы по алфавиту (не по цифрам). В таком случае join будет корректно работать.

т.е. достаточно 192.168.10.7 заменить на 192.168.010.007 и выполнить sort.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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