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

如何用sed/awk从含特殊字符的复杂输入中提取pk对应数字

提取"pk"字段对应数字的几种方法

方法1:使用sed(文本匹配)

针对含大量特殊字符的输入,用单引号包裹sed命令避免转义麻烦,直接匹配"pk":后的连续数字:

sed -n 's/.*"pk":[[:space:]]*\([0-9]*\).*/\1/p' input.txt

解释:

  • -n:仅输出匹配到的内容
  • .*"pk":[[:space:]]*:匹配任意字符直到"pk":,忽略字段后的空格
  • \([0-9]*\):捕获目标数字(这就是需要的pk值)
  • \1:输出捕获到的数字
  • p:打印最终结果

方法2:使用awk(字段拆分)

把"pk":作为分隔符拆分内容,再提取数字部分:

awk 'match($0, /"pk":[[:space:]]*([0-9]+)/, arr) {print arr[1]}' input.txt

解释:

  • match()函数匹配正则表达式,将捕获到的数字存入数组arr,直接输出arr[1]即可

方法3:使用jq(推荐,JSON解析工具)

如果输入是完整的JSON格式,用jq解析比文本匹配更可靠,不会因特殊字符或格式变动出错:

jq '.results[0].pk' input.json

这个命令直接定位到results数组第一个元素的pk字段,输出对应数字。

注意:若输入是不完整的JSON(比如示例文本末尾未闭合),jq会报错,此时用前两种文本匹配方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:07