1

У меня есть файл конфигурации в формате JSON со следующим блоком

"device" :
{
    "name"       : "MyPi",
    "type"       : "ws2801",
    "output"     : "/dev/spidev0.0",
    "rate"       : 250000,
    "colorOrder" : "rgb"
},

Я использую sed (не версия GNU для OS X), чтобы заменить строковые значения выражением sed, например: sed -i '' '1h;1!H;$!d;x;s#\("device" :[^}]*"colorOrder"[ ]*: \)"[^"]*"#\1"grb"#' hyperion.config.json

Теперь я хочу заменить строку "output": на результат ls /dev/tty.usbmodem* этой командой: sed -i '' -e '1h;1!H;$!d;x;s#\("device" :[^}]*"output"[ ]*: \)"[^"]*"#\1"$(ls /dev/tty.usbmodem*)"#' hyperion.config.json Однако ls не выполняется, и я получаю "output" : "$(ls /dev/tty.usbmodem*)", я попытался заменить одинарные кавычки на двойные кавычки с экранированием внутри выражения, но этого не произошло Работа.

Так как же заменить значение вывода (внутри блока "устройство") выводом команды ls ?

2 ответа2

1

Добавьте кавычки, как в примере ниже.

Заменить:

'xxx"$(ls /dev/tty.usbmodem*)"xxx'

от:

'xxx"'"$(ls /dev/tty.usbmodem*)"'"xxx'
1

заменить часть (внутри одинарных кавычек)

$(ls /dev/tty.usbmodem*)

от

'"$(ls /dev/tty.usbmodem*)"'

следовательно, выход из одиночной кавычки и ввод двойной кавычки для команды, затем повторный ввод одинарной кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .