如何使用 ls 搜索具有固定名称长度的文件?

Laz*_*zer 7 ls shell wildcards

在一个目录中,我有这样的文件

lazer_100506
lazer_100707
lazer_091211
lazer_110103
lazer_100406_temp
lazer_100622#delete
Run Code Online (Sandbox Code Playgroud)

等等

如何获得仅前四个文件的列表?

$ ls lazer_......
ls: lazer_......: No such file or directory
$ 
Run Code Online (Sandbox Code Playgroud)

wag*_*wag 11

有多种方法:

ls 只要

ls lazer_??????
Run Code Online (Sandbox Code Playgroud)

lsegrep

ls | egrep '^lazer_.{6}$'
Run Code Online (Sandbox Code Playgroud)

find

find . -regextype posix-egrep -regex '^./lazer_.{6}$'
Run Code Online (Sandbox Code Playgroud)

  • 扩展通配符的不是`ls`:而是shell 扩展。 (7认同)
  • @Lazer 您遇到的是 [globbing](http://en.wikipedia.org/wiki/Glob_%28programming%29) 和 [正则表达式](http://en.wikipedia.org/wiki) 之间的区别/正则表达式)。不幸的是,这两种语法共享一些相同的符号,但它们的含义却截然不同。在正则表达式中,`.` 表示任何单个字符,但带有 globs,这是由 `?` 指定的。Shell 理解通配符,而不是正则表达式。 (3认同)
  • 在 Bash 中,输入 `??????` 的简单方法:<Esc> 6 ? 或 Alt-6 ? (2认同)