我有一个 JSON 格式的配置文件,其中包含以下块
"device" :
{
"name" : "MyPi",
"type" : "ws2801",
"output" : "/dev/spidev0.0",
"rate" : 250000,
"colorOrder" : "rgb"
},
我使用 sed(OS X 上的非 GNU 版本)用 sed 表达式替换字符串值,如下所示:
sed -i '' '1h;1!H;$!d;x;s#\("device" :[^}]*"colorOrder"[ ]*: \)"[^"]*"#\1"grb"#' hyperion.config.json
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
?
答案1
替换部分(单引号内)
$(ls /dev/tty.usbmodem*)
经过
'"$(ls /dev/tty.usbmodem*)"'
因此退出单引号部分并输入命令的双引号,然后重新输入单引号。
答案2
像下面的例子一样添加引号。
代替:
'xxx"$(ls /dev/tty.usbmodem*)"xxx'
经过:
'xxx"'"$(ls /dev/tty.usbmodem*)"'"xxx'