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

求正确正则表达式:匹配指定格式行并排除含grep的行

解决方案:精准匹配目标行的正则表达式

直接上能满足你需求的正则表达式:

^username\s+\d+\s+(?!.*grep).*\/some\/path\/somescript\.py$

逐部分拆解说明

  • 开头匹配逻辑:^username\s+\d+\s+

    • ^username:强制行的起始是username,避免匹配到中间包含该词的行
    • \s+:匹配1个或多个空格,严格符合你要求的“至少一个空格”规则
    • \d+:匹配一串连续数字(对应你示例里的进程ID这类数值)
    • 末尾的\s+:确保数字后至少有一个空格,分隔后续内容
  • 排除含grep的行:(?!.*grep)

    • 这是负向前瞻断言,作用是检查当前位置之后的所有内容里,完全不包含grep字符串
    • .*会匹配任意字符(除换行符),所以不管grep出现在行中间的哪个位置,都会被这个断言直接排除
  • 结尾匹配逻辑:.*\/some\/path\/somescript\.py$

    • .*:匹配中间的任意内容(已经被前面的断言限制不能有grep)
    • \/some\/path\/somescript\.py:转义了/和.这两个正则特殊字符,精准匹配你指定的脚本路径
    • $:强制行的结尾就是这个路径,避免匹配到以该路径开头但后面还有额外内容的行

示例验证

  • 对于你的line1:

    username 842 93.0 0.1 180740 36016 ? Sl Jan21 747:36 /some/path/somescript.py
    完全符合所有规则,会被成功匹配

  • 对于你的line2:

    username 8227 0.0 0.0 14356 2496 pts/5 S+ 11:33 0:00 grep /some/path/somescript.py
    因为包含grep,会被负向前瞻断言排除,不会匹配

额外使用提示

如果是在Linux的grep命令里使用这个正则,需要加上-P参数来支持Perl兼容的正则表达式(负向前瞻属于PCRE特性),比如:

grep -P '^username\s+\d+\s+(?!.*grep).*\/some\/path\/somescript\.py$' your-log-file.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:57:00