WSL Debian下如何过滤不匹配/mnt/c/或/mnt/x/的搜索结果
解决locate结果过滤/mnt/c/和/mnt/x/开头行的问题
你之前用的locate $str | grep /[!cx]逻辑有误,这个表达式是匹配任意位置出现"/"后跟非c、x字符的行,完全不是你要的「排除开头为/mnt/c/或/mnt/x/的行」的逻辑,所以达不到预期效果。
给你几个可行的解决方法:
方法一:grep反向匹配精准过滤
使用grep -v(反向匹配,即排除符合模式的行)结合行首正则:locate $str | grep -v '^/mnt/[cx]/'解释:
^表示匹配行的开头,[cx]匹配c或x字符,整个模式会命中所有以/mnt/c/或/mnt/x/开头的行,-v参数把这些行从结果里剔除。方法二:扩展正则更清晰匹配
如果觉得字符类不够直观,用扩展正则的逻辑或更明确:locate $str | grep -v -E '^/mnt/c/|^/mnt/x/'解释:
-E启用扩展正则,|表示逻辑或,精准匹配两种开头的行并排除。进阶:直接用locate内置过滤
若你的locate版本支持--regex选项,可直接在locate里完成过滤,省去管道开销:locate --regex -v '^/mnt/[cx]/' $str
内容的提问来源于stack exchange,提问作者wido
相关产品推荐
相关产品推荐

