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

如何用正则匹配不含指定值的字符串?JSON文件grep实操疑问

解决方法

你的正则思路存在逻辑错误:你写的((?!1)|(?!2)|(?!3))用了逻辑或,意味着只要不是1、不是2、不是3中的任意一个就匹配——但任何数字都会满足至少一个条件(比如"value":1会满足"不是2"和"不是3"),所以这个正则会匹配所有行,完全起不到过滤作用。

下面给两种可行的实现方式:

方式一:负前瞻精准排除

用Perl兼容正则(grep加-P参数),通过负前瞻排除1、2、3这三个单独的数字:

grep -rP '.*"value":\s*(?!(1|2|3)\b)\d+' /path/to/your/json/files

正则解释:

  • .*"value"::匹配行中到"value":为止的内容
  • \s*:匹配冒号后可能存在的空格(兼容"value":4和"value": 10这类格式)
  • (?!(1|2|3)\b):负前瞻断言,确保后面不是1、2、3加单词边界(避免误排除10、25这类包含1/2/3的多位数)
  • \d+:匹配后续的数字(如果需要支持小数,改成\d+(\.\d+)?)

方式二:反向匹配(更直观)

先匹配所有value为1/2/3的行,再用-v参数反向输出不匹配的行:

grep -rP '.*"value":\s*(1|2|3)\b' /path/to/your/json/files -v

这个方法逻辑更简单,容易理解,适合快速实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:55:26