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

如何在Bash脚本中筛选仅含'Inv'而非'InvCR'的路径?

解决grep匹配"Inv"时误包含"InvCR"的问题

你的问题出在grep -i "Inv"会匹配所有包含"Inv"的字符串,包括"InvCR"这类以"Inv"开头的更长字符。可以通过以下几种方式修正:

  • 使用单词边界匹配:利用grep的单词边界元字符\<和\>,确保"Inv"是独立的单词(不会被其他字母数字字符跟随)。替换原命令中的grep -i "Inv"为:

    grep -i "\<Inv\>"
    

    完整命令:

    find /base/path/ -type d | grep -i "$1" | grep -i ".root" | grep -i "\<Inv\>" | grep -v "deleted"
    

    注:路径中的/属于非单词字符,所以\<Inv\>会正确匹配xxx/Inv/xxx这类路径,不会匹配xxx/InvCR/xxx。

  • 匹配"Inv"后接非字母数字或字符串结尾:如果"Inv"后面可能跟非字母数字字符(比如下划线、斜杠),或者在路径末尾,可以用扩展正则表达式限定:

    grep -Ei "Inv([^a-zA-Z0-9]|$)"
    

    完整命令:

    find /base/path/ -type d | grep -i "$1" | grep -i ".root" | grep -Ei "Inv([^a-zA-Z0-9]|$)" | grep -v "deleted"
    
  • 合并多个grep提升效率:把多个过滤条件合并到一个grep命令中,减少管道次数:

    find /base/path/ -type d | grep -vi "deleted" | grep -Ei "$1.*\.root.*\<Inv\>"
    

    注:如果$1包含正则特殊字符,可能需要先转义,比如用sed 's/[.*+?^$(){}|[\]\\]/\\&/g' <<< "$1"处理后再使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:26:01