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

如何使用grep或其他命令正确提取匹配内容:提取不含特殊字符与后缀的版本号

别担心,我来帮你搞定这个文本提取的问题!你的需求是从转义后的JSON片段里提取纯版本号并去掉-internal后缀,其实可以用几种简洁的方法实现,我给你一步步拆解:

方案1:grep + sed 组合(无需额外工具)

这个方法先精准提取出版本相关内容,再清理后缀:

grep -oP '(?<=&quot;versionName&quot;: &quot;)[^&quot;]+' file.json | sed 's/-internal$//'
  • grep -oP 部分:用正向预查匹配到versionName后的版本字符串(直到下一个转义引号&quot;),只输出匹配的核心内容
  • sed 's/-internal$//':精准去掉末尾的-internal后缀,直接得到纯版本号

方案2:awk 一步到位

awk可以直接按分隔符拆分内容,省去多步管道操作:

awk -F'&quot;' '/versionName/ {split($4, ver, "-"); print ver[1]}' file.json
  • -F'&quot;':把转义引号作为字段分隔符,将每行内容拆分成多个字段
  • /versionName/:只处理包含目标关键词的行,避免无效匹配
  • split($4, ver, "-"):把第4个字段(也就是1.1.5000-internal)按-拆分,存到数组ver里
  • print ver[1]:输出数组的第一个元素,就是你要的1.1.5000

方案3:用jq 处理JSON(最靠谱的方法)

如果你的系统安装了jq(专门处理JSON的工具),这个方法最稳妥,能避免正则匹配的各种边缘问题:

sed 's/&quot;/"/g' file.json | jq -r '.versionName | split("-")[0]'
  • sed 's/&quot;/"/g':先把转义的&quot;替换成正常的双引号,让内容变成标准JSON格式
  • jq -r '.versionName | split("-")[0]':提取versionName字段,按-拆分后取第一个元素,-r确保输出不带引号

为什么你之前的尝试没成功?

你第一个grep命令失败,可能是因为部分环境里的grep -P对正向预查的语法支持有差异;而后面的命令只是简单截取内容,没有针对性处理-internal后缀,所以结果不符合预期。

试试上面的方法,应该能完美得到你想要的1.1.5000!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:22:33