LINUX.ORG.RU

Удалить последние цифры в ip-адресах

 , ,


0

1

Доброго времени суток!

Никак не могу найти примеры по sed-у. Обкурил весь гугль. В манах тоже неопределенность.

Есть много ip-адресов вида 10.XXX.YYY.ZZZ с разными циферками в виде списка. Как с помощью sed обрезать список адресов до вида 10.XXX.YYY. ? Далее я их объединю и отсортирую в подсети.

ZZZ могут быть от 1 до 254, т.е. фиксированно удалить с конца 1-2-3 цифры не прокатит.

Спасибо!



Последнее исправление: dev-ice (всего исправлений: 1)

померяйте и мой ...

$ echo "12.123.1.23\n12.123.13.13" | grep -o -E '([0-9]+\.?){2}[^\.]+'
12.123.1
12.123.13
однострочник

з.ы.

до вида 10.XXX.YYY.

grep -o -E '([0-9]+\.){3}'

anTaRes ★★★★
()
Ответ на: комментарий от yoghurt

Но по моему парсеру это конкатенация NF-- и 1 P_P

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Я само выражение-то распарсить с утра не могу

А я вообще смотрю на вас как на роботов, такие выражения из космоса принимаете =)))

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от yoghurt

Интересно, а что матчит вот этот NF-- 1 паттерн?

Это не паттерн, это уменьшение числа полей на единицу (NF — number of fields, '--' — декремент) и вывод того, что получилось, в stdout. К слову, awk -F. -v OFS=. 'NF-=2' выведет первые два октета через точку.

awk -F. -v OFS=. '/.*/ { NF-- ; print }' — то же самое в более человекопонятном виде.

dexpl ★★★★★
()
Последнее исправление: dexpl (всего исправлений: 1)
Ответ на: комментарий от dexpl

awk -F. -v OFS=. '/.*/ { NF-- ; print }' — то же самое в более человекопонятном виде.

Строго говоря, нет. То же самое в человеко-понятном виде это:

awk -F. -v OFS=. '(NF-- 1) { print }'
И отсюда становится видно, что я в ночи ступил и 1 тут не к месту, т.к. я имел её в виду как всегда срабатывающий паттерн, а вышла конкатенация со значением NF--. Достаточно было:
awk -F. -v OFS=. 'NF--'

unterwulf
()
Ответ на: комментарий от yoghurt

Интересно, а что матчит вот этот NF-- 1 паттерн?

Непустая строка в булевом контексте трактуется как true и как следствие матчит любую входную запись. Здесь она ещё в качестве сайд-эффекта уменьшает NF.

unterwulf
()
Ответ на: комментарий от unterwulf

И отсюда становится видно, что я в ночи ступил и 1 тут не к месту, т.к. я имел её в виду как всегда срабатывающий паттерн, а вышла конкатенация со значением NF--. Достаточно было:

Ну вот да, теперь всё стало на свои места)))

yoghurt ★★★★★
()
Ответ на: комментарий от anTaRes

Спасибо! Уже заиспользоввал предыдущий и точку прикрутил))

dev-ice
() автор топика

В данном, конкретном случае советую ещё глянуть на ipcalc:

$ ipcalc 192.168.1.0 - 192.168.1.255
deaggregate 192.168.1.0 - 192.168.1.255
192.168.1.0/24
Сортируешь, берёшь первый и последний адрес, а оно тебе подсеть говорит.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.