You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用grep/sed/awk提取指定行page_token值并存储到变量

解决方案

你可以用以下命令来实现需求,它会精准定位到包含"next"的行,获取其下一行的内容,并提取出_page_token的值:

PAGE_TOKEN=$(awk '/"next"/{getline; match($0, /_page_token=([^"]+)/, arr); print arr[1]}' test.txt)
echo "PAGE_TOKEN=\"$PAGE_TOKEN\""

命令解释:

  • awk '/"next"/{...}' test.txt:遍历test.txt,当遇到包含"next"的行时执行花括号内的操作
  • getline:读取当前匹配行的下一行,也就是包含目标url的那一行
  • match($0, /_page_token=([^"]+)/, arr):用正则表达式匹配_page_token=后面直到双引号的内容,捕获组([^"]+)会把我们需要的token值存到数组arr的第一个元素里
  • print arr[1]:输出捕获到的token值

执行后你会得到期望的输出:

PAGE_TOKEN="121_%_@212absa23bababa121212121212121"

为什么你的原命令没成功?

你的原命令cat test.txt| grep "next" | sed 's/^.*: *//;q'有两个关键问题:

  1. 取错了行:grep "next"只拿到了包含"next"的那一行,而_page_token在它的下一行里,所以根本没处理到目标内容
  2. 替换逻辑不对:就算拿到了正确的行,你的sed替换也无法精准提取_page_token后面的特定内容,因为它只是简单删除了行首到冒号的部分,会把整个url内容都取出来,而不是只取token值

如果你更习惯用grep和sed组合,也可以用这个版本:

PAGE_TOKEN=$(grep -A1 '"next"' test.txt | grep '"url"' | sed -E 's/.*_page_token=([^"]+).*/\1/')
echo "PAGE_TOKEN=\"$PAGE_TOKEN\""
  • grep -A1 '"next"':输出包含"next"的行以及后面1行
  • grep '"url"':过滤出包含url的目标行
  • sed -E 's/.*_page_token=([^"]+).*/\1/':用扩展正则捕获_page_token=到双引号之间的内容,替换为捕获到的值

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:20:59