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

如何用sed筛选以Dev_开头且结尾为3位及以内数字的字符串?

解决方案

使用sed实现需求

你可以通过sed的多步正则匹配替换完成筛选,精准定位需要保留的模式,删除不符合项后再整理格式:

sed -E '
  # 删除所有非Dev_开头的元素
  s/"[^"]*"(, )?(?![^[]*Dev_)//g;
  # 删除Dev_开头但结尾数字超过3位的元素
  s/"Dev_.*_[0-9]{4,}"(, )?//g;
  # 清理数组首尾残留的逗号和多余空格
  s/^\[ *, */\[/;
  s/ *, *\]$/\]/
' input.txt

命令说明:

  • -E 启用扩展正则表达式,无需转义括号、量词等符号
  • 第一步匹配所有非Dev_开头的带引号字符串,连同其后可能的逗号空格一并删除
  • 第二步匹配Dev_开头、末尾为下划线加4位及以上数字的字符串,连同后续逗号空格删除
  • 最后两步清理数组首尾的冗余符号,保证输出格式符合JSON规范

更可靠的方案:用jq处理JSON

由于你的输入是标准JSON格式,用jq处理会比sed更稳妥,避免正则匹配JSON时的边缘问题:

jq '[ .[] | select(startswith("Dev_") and test("_([0-9]{1,3})$")) ]' input.txt

命令说明:

  • .[ ] 遍历数组内所有元素
  • startswith("Dev_") 筛选以Dev_开头的项
  • test("_([0-9]{1,3})$") 校验元素结尾为下划线加1-3位数字
  • 最终将符合条件的元素重新组合为数组

测试结果

用你的输入示例测试,两种方法都会输出:

[ "Dev_08346f824a146dafbdca4b63eb3ce0b1549c6346_165", "Dev_0ab8997f5d45ed6b7515b5148d492c98109bf94a_16" ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:04:55