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

Tin*_*ino 0 bash json sed

我想删除一个包含"electron-inspector": "0.1.4",.package.json 的行

以下不起作用.

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

我需要改变什么?

Gil*_*not 8

你可以做到这一点,但不是一个JSON解析器! 警告

sed -i '' -e '/electron-inspector/d' file
Run Code Online (Sandbox Code Playgroud)

(-i ''是macOS的sed所必需的)

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

{"foo": 123, "electron-inspector": "0.1.4", "bar": 42 }
Run Code Online (Sandbox Code Playgroud)

BOOOM! 所以:

正确的方法,使用:

jq -r 'del(.["electron-inspector"])' file.json > _.json && mv _.json file.json
Run Code Online (Sandbox Code Playgroud)

破折号-jq的一个特例

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

jq 'del(.electroninspector)' file.json    
Run Code Online (Sandbox Code Playgroud)

检查JQ


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

cat file.json
{"foo": 123, "electron-inspector": "0.1.4", "bar": 42 }
Run Code Online (Sandbox Code Playgroud)

代码:

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

编辑文件:

{
    "foo": 123,
    "bar": 42
}
Run Code Online (Sandbox Code Playgroud)

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

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

command ...... file.json | sponge file.json
Run Code Online (Sandbox Code Playgroud)

您需要安装.