1

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

 Консоль:
STR="@                         3600 IN      A       IP"
SRT2=";@                         3600 IN      A       IP"

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

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

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

2 (20.11.2014 12:04:26 отредактировано Vascom)

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

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

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

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

3

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

 Консоль:
FOO="@                         3600 IN      A       IP"
BAR=";@                         3600 IN      A       IP"

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

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

4

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

sed -i -e "s/$FOO/$BAR/" $STD/$ZNAME

5

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

6

Vascom пишет:

Можно же сразу сделать

sed -i

а лучше

 Консоль:
sed  -i*~

тогда sed  делает бекап.

Vascom пишет:

-e

не нужно.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)