Shell中如何修改sed命令删除JSON文件指定行?
解决sed删除package.json特定行的问题
我来帮你搞定这个sed命令的问题~你原来的命令之所以不生效,是因为缺少了删除动作的指令,而且匹配规则也没写完整。
正确的命令写法
根据你用的是macOS(BSD sed)还是Linux(GNU sed),命令略有区别:
1. macOS(BSD sed)环境
你之前用了-i ''的写法,这是macOS sed的语法,正确的完整命令应该是:
sed -i '' '/"electron-inspector": "0.1.4",/d' ./package.json
- 核心是
/匹配内容/d:d是sed的删除指令,意思是找到匹配双引号内那行内容的行,直接删除 - 要完整匹配行里的内容,包括引号、版本号和末尾的逗号,这样才不会误删其他行
2. Linux(GNU sed)环境
GNU sed不需要-i后面的空参数,命令简化为:
sed -i '/"electron-inspector": "0.1.4",/d' ./package.json
额外注意事项
如果这行是package.json里最后一个依赖项,它的末尾可能没有逗号,这时候可以调整匹配规则,兼容带/不带逗号的情况:
- macOS版本:
sed -i '' '/"electron-inspector": "0.1.4"[,\s]*$/d' ./package.json - Linux版本:
sed -i '/"electron-inspector": "0.1.4"[,\s]*$/d' ./package.json
这里的[,\s]*$表示匹配行末的0个或多个逗号/空白字符,覆盖不同格式的情况。
另外,操作前建议先测试效果,去掉-i参数运行命令,先查看删除后的输出是否符合预期,确认没问题再修改原文件:
sed '/"electron-inspector": "0.1.4",/d' ./package.json
内容的提问来源于stack exchange,提问作者Tino
相关产品推荐
相关产品推荐

