LinuxForum.Fans
Тема

замена текста в файлах

Автор: vinner 7 сообщений 4557 просмотров
#320742

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

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

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

text
cut -d = -f2
#320747

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

text

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
#320753
Lupo Alberto написал:
Не совсем понял, что вы пытаетесь сделать, но...
text

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

Как пример:

text
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

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

Не оно?

#320825
"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/
разницы практически нет... дело вкуса...

#320836
"Fat-Zer⇓" написал:
чисто из интереса, как этот ахтунг в принципе должен был бы работать?

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

text
sed 's/^\(mail_server=\).*/\1192.168.51.78/'
#320869
"ormorph⇓" написал:
Да ваш пример работает, только его лучше привести к такому виду.

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

Войдите или зарегистрируйтесь, чтобы ответить.