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