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

如何用Linux命令截取字符串中Id至首个逗号间的内容?

提取目标Id的解决方案

嘿,我来帮你搞定这个问题!你的原始字符串虽然存在JSON语法错误(比如括号不匹配、缺少分隔符),但我们完全可以用文本处理工具精准提取出需要的Id值,最终得到「Id:17 Id:19」的结果。下面给你两种实用方案:

方案一:用grep的Perl正则模式(推荐,简洁高效)

利用grep的Perl正则匹配能力,直接捕获Id":"后面的数字,再拼接成目标格式:

# 假设你的字符串通过管道输入,或存储在input.txt文件中
echo '[{"value":1,"btata":"15","Id":"17","","url":"","time":"222"{"value":1,"secId":"16","Id":"19","time":"20218 22status":""}' | grep -oP 'Id":"\K\d+' | sed 's/^/Id:/' | tr '\n' ' '

命令解释:

  • -o:只输出匹配到的内容,而非整行文本
  • -P:启用Perl兼容正则表达式,支持更灵活的匹配规则
  • Id":"\K\d+:\K会忽略前面匹配的Id":",只捕获后面的连续数字(\d+表示一个或多个数字)
  • sed 's/^/Id:/':给每个捕获到的数字前缀加上Id:,形成目标格式
  • tr '\n' ' ':把每行结果的换行符替换为空格,最终得到连续的目标字符串

方案二:用sed实现(适配你之前的尝试思路)

如果你更倾向于用sed完成,可以通过捕获组提取数字并格式化:

echo '[{"value":1,"btata":"15","Id":"17","","url":"","time":"222"{"value":1,"secId":"16","Id":"19","time":"20218 22status":""}' | sed -n 's/.*Id":"\([0-9]*\).*/Id:\1/p' | tr '\n' ' '

命令解释:

  • -n:默认不输出任何内容,仅打印我们指定的匹配结果
  • s/.*Id":"\([0-9]*\).*/Id:\1/p:用捕获组\([0-9]*\)匹配Id":"后面的数字,将整行替换为Id:加捕获到的数字,p表示打印替换后的内容
  • tr '\n' ' ':同样把换行符替换为空格,得到最终的目标格式

这两种方案都不依赖正确的JSON格式,完全基于文本模式匹配,能轻松处理你给出的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:09:55