Менять местами символы в определенных позициях в строках разной длины.

Я пытался изучить sed, и примеры, которые я нашел здесь, предназначены для замены дат с 05082012 на 20120805, и у меня возникли проблемы с их адаптацией к моим текущим потребностям.

Мне нужно преобразовать IP-адрес 10.4.13.22 в обратный поиск 22.13.4.10 для сценария nsupdate. Моя самая большая проблема заключается в том, что иногда каждый октет может изменять длину, например. 10.4.13.2 и 10.19.8.126

Спасибо за любую помощь!

echo 10.0.2.99 | sed 's/\(....\)\(....\)/\2\1/'

это то, что я пробовал в настоящее время, просто основываясь на другом вопросе здесь, но, поскольку примеры не дают особого объяснения того, что .... означает, у меня проблемы с пониманием того, что он делает.

Это вывод этой команды .2.910.09, и я ожидаю 99.2.0.10.

Непосредственно я хочу переставить каждый «раздел», разделенный знаком «.».


person ACiD GRiM    schedule 23.09.2012    source источник
comment
Не могли бы вы привести краткий пример ввода/вывода? А также ваша текущая команда. Вы можете отредактировать свой пост, чтобы добавить информацию.   -  person Lev Levitsky    schedule 23.09.2012
comment
Я обновил дополнительную информацию   -  person ACiD GRiM    schedule 23.09.2012
comment
И желаемый результат для этого случая ..? 99.2.0.10?   -  person Lev Levitsky    schedule 23.09.2012
comment
Да, извините, надо было уточнить, исправлено.   -  person ACiD GRiM    schedule 23.09.2012


Ответы (1)


Метод «грубой силы» для «обратного» адреса IPv4 будет следующим:

sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)/\4.\3.\2.\1/g'

или, для GNU sed,

sed -r 's/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/\4.\3.\2.\1/g'
person Lev Levitsky    schedule 23.09.2012
comment
Спасибо, я вижу, как [0-9]+ позволяют изменять длину, а символ \. указывает разделитель, а \4 \3 \2 \1 - это разные переменные, упорядоченные в обратном порядке. Очень элегантно, и вы только что помогли мне понять гораздо больше. Хорошего дня! - person ACiD GRiM; 23.09.2012
comment
@ACiDGRiM Нет проблем :) Вот пара ссылок, если интересно: sed ссылка< /a>, sedрегулярные выражения. - person Lev Levitsky; 23.09.2012