Я получил эту ошибку, когда использовал несвободную версию дистрибутива Debian. Бесплатная версия работала нормально и без проблем. Я считаю, что проблема в том, что руководство по установке не может загрузить часть кодовой базы и, следовательно, не может выполнять функции раздела из-за отсутствия кода. Например, глядя на команды busybox, нет команд mount
или ls
.
Если вы используете GNU sed, вы можете использовать флаг /e
для команды s/
, но выполняемой командой будет вся строка:
#!/bin/sed -f
/my_server_ip/{
s//%s/
s/.*/printf '&' $(hostname -i)/e
}
Это создает командную строку, которая выглядит как printf '"server":"%s",' $(hostname -i)
, а затем выполняет ее, заменяя соответствующую строку.
Вы можете использовать параметр замены, например: sed -i -e "s/my_server_ip/$(hostname -i)/" txt
Я предполагаю, что вы просто хотите изменить то, что находится в кавычках после "server"
, а не конкретную строку my_server_ip
, и если это так, то используйте любой sed:
$ sed 's/\("server":"\)[^"]*/\1'"$(hostname -i)"'/' file
"server":"<the host name>",
"server_port":8388,
или любой другой awk (более надежный, если вывод hostname -i
может содержать метасимволы обратной ссылки или разделители sed, чего не должно быть):
$ awk -v h="$(hostname -i)" 'BEGIN{FS=OFS="\""} $2=="server"{$4=h} 1' file
"server":"<the host name>",
"server_port":8388,
m=$(hostname -i)
sed -i "s/my_server_ip/$m/g" filename
"server":"192.168.1.1",
"server_port":8388,