如何在 sed 中正确执行命令并使用其结果?

如何在 sed 中正确执行命令并使用其结果?

我有一个 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'

相关内容