Intereting Posts
Почему я не могу выполнить скрипт только с разрешения на выполнение? Не удается открыть Htop через SSH (Terminal Issue) Запретить обновление «измененного времени» при копировании файлов в установленную папку Samba Извлечение широты / долготы из изображения с использованием завитка Debian Fresh Install: IO_Page_Fault Диск ввода / вывода и средний пик нагрузки один раз в час Автоматические обновления не будут использовать mailx при запуске Systemd заполнить базу данных mySQL текстовой информацией Найти общий размер определенных файлов в ветке каталога как создать пользовательский сеанс рабочего стола для x2go Переконфигурируйте вход через root ftp (потерянный ssh-доступ) Как сделать обеспечение качества объединенных видео? Производительность и ограничения использования X GUI удаленно? Агент Logstash не отправляет журналы на сервер Redis Как удалить идентификатор устройства из введенного вручную драйвера usb-serial

sed в bash script с переменными возвращает неопределенную ошибку

Мне нужно заменить первую строку файла полным содержимым из другого файла. Видит ли я то, что мне не хватает?

$ cat old.txt --- foo bar $ cat append.txt --- 123  $ cat process.sh old=old.txt append=append.txt sed -i "1s/.*/$append/" $old cat $old 

Я бы ожидал

 $ bash process.sh --- 123  foo bar 

Хотя вместо этого я получил

 sed: -e expression #1, char 9: unterminated `s' command 

при попытке sed с переменной внутри моего скрипта

в то время как этот работает (без переменной) sed -i “1s /.*/ loremipsum /” $ old

Чтобы заменить первую строку old.txt содержимым append.txt :

 $ sed -e '1{ r append.txt' -e 'd;}' old.txt --- 123 <321> foo bar 

Добавьте -i перед первым -e чтобы выполнить редактирование на месте в old.txt .

Это запускает следующий короткий скрипт sed для данного файла:

 1{ # we're on the first line r append.txt # read in the whole of the append.txt file d; # delete the current line } # (implicit print) 

В командной строке это делится на две отдельные строки -e выражения, так как имя файла, используемого с командой r должно заканчиваться символом новой строки (или концом текущей строки выражения).