json - 在已使用引号的 sudo 封装的 sed 命令上使用引号

标签 json linux shell sed sudo

我有一个 shell 脚本,我想在其中更改 JSON 文件中的以下文本:

"foo-bar": true

对此:

"foo-bar": false

我想使用 sed 命令来执行此操作。但是,JSON 脚本位于我的 /etc 目录中。因此,我必须将整个命令封装在 sudo sh -c 命令中。

这是我的第一次尝试:

sudo sh -c "sed -e 's/"foo-bar": true/"foo-bar": false/' /etc/sample.json > /etc/sample2.json"

我认为 : 引起了问题,所以我转义了它们,但这没有帮助:

sudo sh -c "sed -e 's/"foo-bar"\: true/"foo-bar"\: false/' /etc/sample.json > /etc/sample2.json"

还是没用。因此,我尝试了有人在 Stackoverflow 上的类似帖子中建议的双引号:

sudo sh -c "sed -e 's/""foo-bar""\: true/""foo-bar""\: false/' /etc/sample.json > /etc/sample2.json"

但是没有效果。

现在我真的很困惑。因为它是一个封装的 sudo 命令,所以我需要在整个命令周围加上额外的引号,我相信这就是导致问题的原因。但我该如何解决这个问题呢?

最佳答案

尝试这样做:

echo sed -e 's/"foo-bar": true/"foo-bar": false' /etc/sample/sjon >/etc/sample2.json' | sudo sh

换句话说,在本地构建命令,然后让 sh(1) 从 stdin 获取命令。

关于json - 在已使用引号的 sudo 封装的 sed 命令上使用引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31004854/

相关文章:

android - 通过标签将 JSON 数组循环到 android sqlite 数据库中?

c++ - 内存映射文件访问速度很慢

linux - Bash 从 Cronjob 中按顺序运行

linux - 在 Amazon AMI Linux 命令行上安装 SoapUI

未设置变量的 bash 脚本

javascript - 如何在 UI 中保持流数据更新

javascript - JSON编码数组

java - 用Java解析JSON数组

bash - 如何在 Unix shell 脚本中使用 echo 和 grep?

linux - Awk、颜色和音频