LinuxForum.Fans
Тема

замена содержимого строки

Автор: sotariz 6 сообщений 2668 просмотров
20.11.2014 11:47 #401780

Всем привет!
Ни как не могу сообразить... надо в куче файлов сменить содержимое определенной строки строки, файлы - файлы зон. Пробовал sed юзать, но толи лыжи не едут толи....

[console]STR="@ 3600 IN A IP"
SRT2=";@ 3600 IN A IP"

sed "s/$STR/$STR2" file > file.new

sed: -e выражение #1, символ 3: незавершенная команда `s'[/console]

что ему не так? пробелы в строке? как выйти из ситуации, ибо файлов много и руками пройти все не вариант?..

20.11.2014 12:02 · отредактировано #401783
text
sed "s/$STR/$STR2/" file > file.new

Ты забыл поставить завершающий слеш. Тебе же об этом прямо русским языком в ошибке написано.

И переменная у тебя SRT2, а в sed ты вызываешь $STR2 (пустую переменную).

P.S. Сперва отладь скрипт где-нибудь, а то рискуешь испортить свои файлы.

20.11.2014 12:31 #401788

Vascom, работаю с копиями
замеченные ошибки - опечатки при создании темы т.к. писал от руки

[console]FOO="@ 3600 IN A IP"
BAR=";@ 3600 IN A IP"

sed sed "s/$FOO/$BAR/" $STD/$ZNAME > $STD/$ZNAME~
mv $STD/$ZNAME~ $STD/$ZNAME[/console]

ошибка нашлась в sed sed... как сразу не заметил не знаю...
Спасибо!

20.11.2014 12:34 #401789

И на самом деле нет нужды создавать временный файл (да ещё и на диске), а затем заменять им основной. Можно же сразу сделать

text
sed -i -e "s/$FOO/$BAR/" $STD/$ZNAME
20.11.2014 12:38 #401790

Vascom, супер! Спасибо, буду знать!

21.11.2014 04:39 #401873

"Vascom" написал:
Можно же сразу сделать

sed -i
а лучше
[console]sed -i*~[/console]
тогда sed делает бекап.

"Vascom" написал:
-e
не нужно.
Войдите или зарегистрируйтесь, чтобы ответить.