Mam plik konfiguracyjny w formacie JSON z następującym blokiem
"device" :
{
"name" : "MyPi",
"type" : "ws2801",
"output" : "/dev/spidev0.0",
"rate" : 250000,
"colorOrder" : "rgb"
},
Używam sed (nie w wersji GNU na OS X), aby zastąpić wartości ciągu wyrażeniem sed w następujący sposób: sed -i '' '1h;1!H;$!d;x;s#\("device" :[^}]*"colorOrder"[ ]*: \)"[^"]*"#\1"grb"#' hyperion.config.json
Teraz chcę zastąpić „wyjście”: wiersz z wynikiem ls /dev/tty.usbmodem*
za pomocą tego polecenia: sed -i '' -e '1h;1!H;$!d;x;s#\("device" :[^}]*"output"[ ]*: \)"[^"]*"#\1"$(ls /dev/tty.usbmodem*)"#' hyperion.config.json
jednak ls
nie jest wykonywany i dostaję "output" : "$(ls /dev/tty.usbmodem*)",
Próbowałem zastąpić pojedyncze cudzysłowy podwójnymi cudzysłowami, uciekając wewnątrz wyrażenia, które nie działało.
Jak więc mogę zastąpić wartość wyjścia (wewnątrz bloku „urządzenie”) wyjściem ls
dowództwo?
sed -i '' -e "1h;1!H;$!d;x;s#\(\"device\" :[^}]*\"output\"[ ]*: \)\"[^\"]*\"#\1\"$(ls /dev/tty.usbmodem*)\"#" hyperion.config.json
jest -bash: !H: event not found
. Z uciekającymi wykrzyknikami: sed -i '' -e "1h;1\!H;$\!d;x;s#\(\"device\" :[^}]*\"output\"[ ]*: \)\"[^\"]*\"#\1\"$(ls /dev/tty.usbmodem*)\"#" hyperion.config.json
: sed: 1: "1h;1\!H;$\!d;x;s#\("dev ...": invalid command code \