1 (16.05.2013 12:23:46 отредактировано vinner)

Добрый день.
Есть много файлов такого формата
8 somename=name1
9 somename2=name2
Нужно все что находится в определенной строке(например в строке № 8) после = заменить на другое значение.

sed -i '8 s/*/new_name/1' 

Как в sed добавить шаблон, чтобы он заменял все после знака = ?
или нужно использовать

cut -d = -f2

2

Не совсем понял, что вы пытаетесь сделать, но...

lupo@gentoo-laptop /tmp % cat test.txt
8 somename=name1
9 somename2=name2
lupo@gentoo-laptop /tmp % sed -i '/^8/ s/\(.*\)=\(.*\)/\1=NEW/' test.txt
lupo@gentoo-laptop /tmp % cat test.txt
8 somename=NEW
9 somename2=name2
Был, был и весь вышел...

3 (16.05.2013 14:15:45 отредактировано vinner)

Lupo Alberto пишет:

Не совсем понял, что вы пытаетесь сделать, но...

lupo@gentoo-laptop /tmp % cat test.txt
8 somename=name1
9 somename2=name2
lupo@gentoo-laptop /tmp % sed -i '/^8/ s/\(.*\)=\(.*\)/\1=NEW/' test.txt
lupo@gentoo-laptop /tmp % cat test.txt
8 somename=NEW
9 somename2=name2

Как пример:

mail_server=192.168.51.77
mail_sender=test@yandex.ru
mail_user=test2@yandex.ru

При этом какие значение после равно заранее не известно

При этом все что в строчке 1 после знака равно заменить на 192.168.51.78
все что в строчке 2 после знака равно на newtest@yandex.ru
все что в строчке 3 после знака равно на newtest2@yandex.ru

4

sed 's/[^mail_server\=]\+$/192.168.51.78/' -i file

Не оно?

5

ormorph⇓ пишет:

sed 's/[^mail_server\=]\+$/192.168.51.78/' -i file

чисто из интереса, как этот ахтунг в принципе должен был бы работать?

vinner, к номерам строк в 10-ти случаях из 10-ти привязываться глупо
в самых примитивных вариантах:
sed '/^mail_server=/s/=.*/192.168.51.78/
sed 's/^\(mail_server\)=.*/\1192.168.51.78/
разницы практически нет... дело вкуса...

95% процентов проблем находятся между клавиатурой и стулом.

6

Fat-Zer⇓ пишет:

чисто из интереса, как этот ахтунг в принципе должен был бы работать?

Упс
недосмотрел, следующие строчки тоже правятся.))
Да ваш пример работает, только его лучше привести к такому виду.

sed 's/^\(mail_server=\).*/\1192.168.51.78/'

7

ormorph⇓ пишет:

Да ваш пример работает, только его лучше привести к такому виду.

ну да... моя ошибка...

95% процентов проблем находятся между клавиатурой и стулом.