提问人:Gabe 提问时间:9/26/2023 最后编辑:Gabe 更新时间:9/26/2023 访问量:69
使用正则表达式查找和删除 JSON 代码
using regular expressions to find and remove json code
问:
我需要删除一个带有 ignition 的项目中的 100,000 多个标签。我认为最好的方法是下载文件的 json 并删除不同设备中一致标签的所有实例。例: 我需要在数百个设备中删除此标签(和其他标签),它们将与FV5003接受的所有其他标签相同,其中可能是PP2340或AG7698。
{
"valueSource": "opc",
"opcItemPath": "ns\u003d1;s\u003d[PPD]FV5003_HOA.State.IO_Open",
"dataType": "Boolean",
"name": "IO_Open",
"tagType": "AtomicTag",
"opcServer": "Ignition OPC UA Server"
},
有没有办法删除所有这样的实例,使 FV5003 成为正则表达式中的通配符。 我在正则表达式方面的经验为零。我也在使用 vscode。
任何帮助都会很棒, 谢谢。
答:
1赞
jhnc
9/26/2023
#1
jq '
del(
.. |
select(type=="object") |
select(has("opcItemPath")) |
select(
.opcItemPath|
test("\\Ans\u003d1;s\u003d\\[PPD\\].*_HOA.State.IO_Open\\Z")
)
)
' input.json
..
- 走结构select
:- 对象
- 包含名为
opcItemPath
- 其值与正则表达式匹配
test
del
给他们打电话
或者,“删除括号内的所有内容”:
jq '
(
.. |
select(
.opcItemPath |
test("\\Ans\u003d1;s\u003d\\[PPD\\].*_HOA.State.IO_Open\\Z")
)?
) |= {}
' input.json
|=
- 将所选对象更新为空对象{}
?
- 丢弃因省略前两个过滤器而可能产生的错误select
上一个:每 3 位数字后屏蔽并插入连字符
评论
^}{]*?\[PPD\](?:FV5003|PP2340|AG7698)_[^}{]*},
(regex101)?如果是这样,是否总是有一个 before 和一个 underscore after 来标识?块内是否有任何大括号......[PPD]