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

在Bash中能否用正则表达式排除指定文件?

问题:用ls列出排除指定前缀的文件

现有文件如下:

aaa-a1
aaa-a2
c
d
eee-e1

能否为ls命令编写正则表达式,列出除aaa*和eee*之外的所有文件?我在JavaScript里会这么写:

^/(?!aaa|eee)([a-z0-9]+)$ 

但ls ^/(?!aaa|eee)([a-z0-9]+)$在Bash里并非有效写法。


解决方法

Bash中ls使用的是**文件名通配(glob)**而非正则表达式,因此无法直接套用JavaScript的正则语法。以下两种方法可以实现你的需求:

方法1:使用Bash扩展glob排除匹配

首先确保开启扩展glob功能(默认可能未开启):

shopt -s extglob

然后执行以下命令即可列出目标文件:

ls !(aaa*|eee*)

!(pattern)是扩展glob的语法,表示匹配所有不符合括号内模式的文件,这里就会排除所有以aaa或eee开头的文件。

方法2:结合ls与grep过滤输出

如果不想修改shell选项,也可以用grep的正则反向匹配来过滤ls的结果:

ls | grep -v "^aaa\|^eee"
  • -v参数表示反向匹配,即输出不满足正则条件的内容
  • ^aaa\|^eee表示匹配以aaa或eee开头的行,反向后就得到了排除这些前缀的文件列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:32:06