【问题标题】:How to extract a value by searching for two words in different lines and getting the value of second one如何通过在不同行中搜索两个单词并获取第二个单词的值来提取值
【发布时间】:2023-01-12 08:26:53
【问题描述】:

如何搜索单词,一旦找到,在下一行中将特定值保存在变量中。

  1. 搜索next
  2. 获取下一行
  3. 提取单词page_token之后的所有内容,而不是边界"
  4. 存储在要使用的变量中
    测试.txt:
    "link": [
        {
          "relation": "search",
          "url": "aaa/ww/rrrrrrrrr/aaaaaaaaa/ffffffff/ccccccc/dddd/?token=gggggggg3444"
        },
        {
          "relation": "next",
          "url": "aaa/ww/rrrrrrrrr/aaaaaaaaa/ffffffff/ccccccc/dddd/?&_page_token=121_%_@212absa23bababa121212121212121"
        },
    ]
    

    所以在这种情况下所需的输出是:

    PAGE_TOKEN="121_%_@212absa23bababa121212121212121"
    

    我的尝试:

    PAGE_TOKEN=$(cat test.txt| grep "next" | sed 's/^.*: *//;q')
    

    没有运气。。

【问题讨论】:

  • 使用合适的工具解析json:jq

标签: bash sed grep


【解决方案1】:

假设您的输入是有效的 json,一种选择是使用:

cat test.json
[{
        "relation": "search",
        "url": "aaa/ww/rrrrrrrrr/aaaaaaaaa/ffffffff/ccccccc/dddd/?token=gggggggg3444"
    },
    {
        "relation": "next",
        "url": "aaa/ww/rrrrrrrrr/aaaaaaaaa/ffffffff/ccccccc/dddd/?&_page_token=121_%_@212absa23bababa121212121212121"
    }
]

PAGE_TOKEN=$(cat test.json | jq -r '.[] | select(.relation=="next") | .url | gsub(".*=";"")')
echo "$PAGE_TOKEN"
121_%_@212absa23bababa121212121212121

【讨论】:

  • 不幸的是,这是一个巨大的 json,我只发布了需要的部分。我尝试使用 grep 做这件事的原因之一是 bc json 是超级嵌套的,它的结构可以改变
猜你喜欢
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多