Grep 文件中的特定模式

问题描述 投票:0回答:1

我有一个像这样的 JSON,并希望根据行中的字符串提取其中的子集。

    {
    "out_name": {
        "inner_name": {
            "k1": [
                "ABC:123|ABC:456",
                "PQR:123|ABC:789",
                "ABC:456|XYZ:456",
            ],
            "k2": [
                "ABC:86294742|ABC:214567200",
                "XYZ:6379|ABC:14390"
            ]
        }
    }
}

结果应该只有 ABC 两次的行。数字将是可变的。如何在 grep 或类似的东西中实现这一点?

{
    "out_name": {
        "inner_name": {
            "k1": [
                "ABC:123|ABC:456"
            ],
            "k2": [
                "ABC:86294742|ABC:214567200"
            ]
        }
    }
}
awk grep
1个回答
0
投票

我不知道

awk
grep
是否内置了对json的支持,但是实现您想要做的事情的一种更简单的方法是使用开箱即用的支持json的东西,比如python。例如,如下所示的脚本将返回所需的结果:

cat example.json | python3 -c 'import fileinput
import json
import re

json_data = ""
for line in fileinput.input():
  json_data = json_data + line

results = {"out_name": { "inner_name": {}}}
data = json.loads(json_data)
for key in data["out_name"]["inner_name"]:
  for el in data["out_name"]["inner_name"][key]:
    if re.search(".*ABC.*ABC.*", el):
      if not(key in results["out_name"]["inner_name"]):
        results["out_name"]["inner_name"][key] = []
      results["out_name"]["inner_name"][key].append(el)

print(json.dumps(results, indent=2))'

其中

example.json
是您要分析的文件。请注意,此代码仅适用于给定的 json 结构,对于不同的用途,您必须正确切割它。

© www.soinside.com 2019 - 2024. All rights reserved.