使用shell中的sed从json文件中删除行

时间:2018-03-17 14:48:19

标签: json bash sed

我想从.package.json

中删除包含"electron-inspector": "0.1.4",的行

以下不起作用。

sed -i '' -e 'electron-inspector' ./package.json

我需要改变什么?

2 个答案:

答案 0 :(得分:8)

你可以这样做,但 不是JSON解析器! warning

sed -i '' -e '/electron-inspector/d' file

(macOS的sed)

需要-i ''

想象一下这样的简单(内联)案例:

{"foo": 123, "electron-inspector": "0.1.4", "bar": 42 }

BOOOM!所以:

正确的方法,使用

jq -r 'del(.["electron-inspector"])' file.json > _.json && mv _.json file.json

短划线-special case for jq

如果你有一个简单的案例,那么命令就是:

jq 'del(.electroninspector)' file.json    

检查JQ

使用和... 的另一种解决方案:

cat file.json
{"foo": 123, "electron-inspector": "0.1.4", "bar": 42 }

代码:

$ node<<EOF > _.json && mv _.json file.json                                               
var o = $(< file.json);
delete o["electron-inspector"];
console.log(JSON.stringify(o, null, 4));
EOF

已编辑的文件:

{
    "foo": 123,
    "bar": 42
}

最后但并非最不重要的是,使用sponge正确编辑文件:

而不是:> x.json && mv x.json file.json,我们可以这样做:

command ...... file.json | sponge file.json

您需要安装

答案 1 :(得分:-3)

我得到了它:

sed -i '/electron-inspector/d' package.json