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

在WSL中用正则提取JSON数据:测试与脚本实现方法

WSL下用正则处理JSON的实操方案

一、WSL中测试正则的常用方法

在WSL里可以用以下命令行工具快速验证正则匹配效果:

  • grep(直观易用):用-o只输出匹配部分,-E启用扩展正则,比如测试匹配url字段:
    grep -oE '"url":"[^"]+"' abc.json
    
  • sed:结合替换命令s测试提取结果,比如:
    sed -E 's/.*"url":"([^"]+)".*/\1/' abc.json
    
  • perl:处理复杂正则更灵活,比如:
    perl -nle 'print $1 if /"url":"([^"]+)"/' abc.json
    

二、用正则替代jq命令的实现

1. 提取顶级字段(替代jq -r '.url')

方法一:sed(兼容多行JSON)

如果JSON是多行排版,用-z参数把文件当作单行处理,避免换行截断匹配:

sed -z -E 's/.*"url":"([^"]+)".*/\1/' abc.json

单行JSON可直接去掉-z:

sed -E 's/.*"url":"([^"]+)".*/\1/' abc.json

方法二:grep(简洁高效)

用Perl正则的正向预查,直接提取字段值:

grep -oP '(?<="url":")[^"]+' abc.json

解释:(?<="url":")是正向预查,定位到"url":"之后,提取后面直到下一个双引号的内容([^"]+)。

2. 提取带特殊字符的字段(比如title)

title字段包含单引号、&符号不影响匹配,替换键名即可复用命令:

grep -oP '(?<="title":")[^"]+' abc.json

3. 提取数组字段(比如tags)

提取整个数组内容:

grep -oE '"tags":\[[^]]+\]' abc.json

只提取数组内的元素部分:

grep -oP '(?<="tags":\[)[^\]]+' abc.json

三、嵌套JSON路径的正则写法(比如.user_data.username.first_name)

假设嵌套JSON结构如下:

{"user_data": {"username": {"first_name": "John", "last_name": "Doe"}}}

要提取first_name的值,正则需适配多层嵌套和可能的空白字符:

grep -z -oP '(?<="user_data":\s*\{"username":\s*\{"first_name":\s*")[^"]+' nested.json

解释:

  • \s*匹配任意空白字符(空格、换行、制表符),兼容JSON的格式化排版
  • 用正向预查逐层定位到目标字段的键名后,提取对应值内容

四、你之前sed命令报错的原因

你执行的sed -E '(url|title|tags)"":"(("|[^"]))*' abc.json报错,是因为sed必须先指定命令(比如替换s、打印p),直接写正则表达式无意义。正确写法需补充命令,比如打印匹配这些字段的行:

sed -n -E '/"(url|title|tags)":"[^"]+"/p' abc.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:25:15