什么命令列出所有以“a”开头且后面有 1 或 2 位数字的文件?

什么命令列出所有以“a”开头且后面有 1 或 2 位数字的文件?

什么命令列出所有以“a”开头且后面有 1 或 2 位数字的文件? (输出可能显示 a0、a1、a2、a3、a00、a01、a99...,但不显示 a333、b12、art53,...)

答案1

zsh壳里,

setopt EXTENDED_GLOB
printf '%s\n' a[[:digit:]](#c1,2)(.)

该模式a[[:digit:]](#c1,2)(.)将匹配名称以 开头并a后跟一两个数字的任何常规文件。最后(.)的确保我们只获取常规文件的名称,同时[[:digit:]](#c1,2)匹配一两个数字。

shbash等中,

printf '%s\n' a[[:digit:]] a[[:digit:]][[:digit:]]

这将列出所有以 an 开头a,然后有一位或两位数字的名称(我们对一位数字的名称使用一种模式,对两位数字的名称使用另一种模式)。但不确定您是否只能获得常规文件的名称(您也可能获得目录等的名称),并且如果一个或另一个模式(或两者)不匹配任何name,模式将保持不展开状态(使用shopt -s nullglobinbash来删除不匹配的模式)。

要清除任何非常规文件,请使用循环:

for name in a[[:digit:]] a[[:digit:]][[:digit:]]; do
    if [ -f "$name" ]; then
        printf '%s\n' "$name"
    fi
done

在这里,我们-f对每个名称应用显式测试。本次测试将真的如果名称引用常规文件(或指向常规文件的符号链接)。如果测试是真的,我们打印名字。

答案2

一种更通用的解决方案,并且不依赖于您使用的 shell,可能类似于

Helios:t larry$ ls -1
a0
a10
a100
ax
axe
b4
Helios:t larry$ find . -mindepth 1 -maxdepth 1 -type f -regextype egrep -regex '\./a[[:digit:]]{,2}'
./a10
./a0

但这会产生一个额外的过程。

相关内容