我有一个巨大的 json 文件(1/2 百万行)。
我需要删除一组包含某个字符串的条目。
{
"bla1": {
"Part1": "Plop1",
"Part2": "Plop2",
"Part3": "BadFling1<stuff>",
"part4": "Plop4",
},
"bla2": {
"Part1": "Plop1",
"Part2": "Plop2",
"Part3": "<stuff>",
"part4": "Plop4",
},
// etc for many more entries
}
Run Code Online (Sandbox Code Playgroud)
所有条目都将“BadFling1”作为“Part3”条目的前缀。
我想知道如何自动删除包含“BadFling1”的所有条目的最佳方法。例如,从上面删除错误条目的结果是:
{
"bla2": {
"Part1": "Plop1",
"Part2": "Plop2",
"Part3": "<stuff>",
"part4": "Plop4",
},
// etc for many more entries
}
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试工作但不够快(因为它有点手动)。
/BadFling1
qan3k5ddq
:map z n@a
Run Code Online (Sandbox Code Playgroud)
现在按住“z”键。
我的 vim foo 不够强大,所以我不确定如何在 vim 中更好地自动化流程。任何帮助表示赞赏。
bash 中的替代方法(也欢迎其他命令行工具)。
试试这个vim
:
:g/BadFling/normal [{V]}d
Run Code Online (Sandbox Code Playgroud)
该:global
命令在与模式匹配的所有行上运行一个命令(我用作BadFling
示例 - 如有必要进行调整)。在这种情况下运行的:normal
命令是运行正常模式命令的命令。这样做的目的是使用在支撑对之间移动的[{
和]}
vim
移动命令的力量。该Vd
是组合体被用来做一个面向删除。这不像 JSON 解析器那样健壮,但假设每个"blah1"
部分都包含在它自己的一组行中,因此逐行删除不会意外删除属于另一个块的任何内容。例如,如果您有类似的东西,则逐行删除方法将不起作用
... end of block you want to keep
}, "blah1" : {
block you want removed
}, "blah2" : {
start of block you want to keep ...
}
Run Code Online (Sandbox Code Playgroud)
此外,[{
only 使用直接父块,因此如果您有更多级别的嵌套,它也将不起作用。
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |