LINUX.ORG.RU

использование sed между 2-мя одинаковыми regexp'ами.

 ,


1

1

Лор привет,

Возникла такая ситуация:

есть выражение

ppp0:192.168.0.3:11000 eth0:192.168.102.80:11111

надо написать 3 функции через sed, можно по отдельности, которые заменяет сначала выражение между : и началом строки, потом между 2-мя : и наконец - между 2-ым : и пробелом. При этом 2часть после пробела изменения не должны касаться.

С первыми 2-мя выражениями я справился как смог:

[root@localhost:~]# a=wlan0 ; sed "s/[^:]*/$a/" /root/123
wlan0:192.168.0.3:11000 eth0:192.168.102.80:11111

[root@localhost:~]# a=wlan0 ;  sed "s/:[^:]*/:$a/" /root/123
ppp0:wlan0:11000 eth0:192.168.102.80:11111

А вот с 3-ей частью уже не хватает думалки.

Заранее благодарен


Ответ на: комментарий от dmitry_malikov

Ну и, соответственно, всё разом

$> a="text1"; b="text2"; c="text3" ; sed -r "s/^([^:]*):([^:]*):([^ ]*)(\ .*)$/$a:$b:$c\4/" <<< "ppp0:192.168.0.3:11000 eth0:192.168.102.80:11111"
text1:text2:text3 eth0:192.168.102.80:11111
dmitry_malikov ★★
()
Ответ на: комментарий от Aidjek

Так. Попробую пояснить, что понимается под этой кашей символов.

^([^:]*):([^:]*):([^ ]*)(\ .*)$

^ - начало строки
([^:]*) - любое количество не двоеточий, первая матчед-группа
: - двоеточие
([^:]*) - любое количество не двоеточий, вторая матчед-группа
: - двоеточие
([^ ]*) - любое количество не пробелов, третья матчед группа
(\ .*) - пробел и всё что угодно
$ - конец строки
dmitry_malikov ★★
()
Ответ на: комментарий от dmitry_malikov

А за это просто огромное спасибо.

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