Обработать отдельно две части строки

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Обработать отдельно две части строки

Непрочитанное сообщение terminus » 2009-05-13 9:51:54

Попытался тут сходу придумать что-нибудь, но незаладилось... Помогите советом.

Есть файл с информацией вида:

Код: Выделить всё

param.one.root=10
param.two.root=11.33
next.param.two.root=21.332
...
Надо привести к виду:

Код: Выделить всё

param_one_root : 10
param_two_root : 11.33
next_param_two_root : 21.332
...
то есть = это разделитель. В первой части заменить . на _ а во второй не менять. Сам разделитель заменить на :

Хотел сделать это через sed s/\./_/g а потом через awk, но не знаю как остановить выполнение sed на = чтобы он в значениях точки не убил...
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Обработать отдельно две части строки

Непрочитанное сообщение skeletor » 2009-05-13 10:21:24

У меня получилось вот так

Код: Выделить всё

[skeletor@srv-test /usr/home/skeletor]$ cat 1.txt
param.one.root=10
param.two.root=11.33
next.param.two.root=21.332
[skeletor@srv-test /usr/home/skeletor]$ cat 1.txt  | sed 's/=/ : /g' > 2.txt
[skeletor@srv-test /usr/home/skeletor]$ cat 2.txt
param.one.root : 10
param.two.root : 11.33
next.param.two.root : 21.332

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Обработать отдельно две части строки

Непрочитанное сообщение terminus » 2009-05-13 10:36:25

Эх, если бы так просто... В первой часте надо . заменить на _ при этом во второй не менять. Поменять разделитель с = на : не проблема через awk -F "=" '{print $1 " : " $2}'

У меня кризис идей именно как сделать замену точек на черточки ДО разделителя (как остановить sed или как сделать это через другую утилиту). Тут важна скорость работы решения. Самое крайнее на что можно пойти это писать отдельный, сложный shell скрипт в котором уже пытаться что-то делать, но мне бы хотелось максимально проще (в идеале одной командой).
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

Re: Обработать отдельно две части строки

Непрочитанное сообщение abanamat » 2009-05-13 10:54:51

Код: Выделить всё

awk -F '=' '{gsub(/\./,"_",$1);print($1":"$2)}'

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Обработать отдельно две части строки

Непрочитанное сообщение terminus » 2009-05-13 11:20:57

Блин! Все гениальное просто :Yahoo!: Спасибо :smile:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.