Answers:
匹配数字的标准文件名浮动模式是[0-9]。这与一位数字匹配:
cat file[0-9].txt
要仅选择其中两个:
cat file[25].txt
对于大于9的数字,括号扩展将很有用(但请参见下面的注释,以了解球形模式和括号扩展之间的区别):
cat file{25..60}.txt
同样,括号扩展也允许单个数字:
cat file{12,45,900,xyz}.txt
(请注意,在上面的示例中,大括号扩展不涉及算术循环,而只是根据提供的字符串生成名称)。
在中bash,在extglob启用外壳程序选项(shopt -s extglob)的情况下,以下内容也将起作用:
cat file@(12|45|490|foo).txt
该@(...)模式将与包含的定|界模式中的任何一种匹配。
分支模式as [...]和@(...)大括号扩展名之间的区别在于,大括号扩展名是在命令行上生成的,实际上可能与当前目录中的任何现有名称都不匹配。文件名遍历模式将匹配名称,但是如果并非所有可能的名称都存在,则外壳程序将不会抱怨。如果不存在匹配的名称,除非nullglob设置了shell选项,否则该模式将保持未展开状态,在这种情况下,该模式将被删除。
例:
touch file1
ls file[0-9]
在这里,仅显示的文件列表file1。
使用ls file{0..9},ls会抱怨找不到内容file0,file2等等。
在以下示例中,第一个命令将仅触摸与给定模式匹配的现有名称,而第二行将创建尚不存在的文件:
touch file[0-9]
touch file{0..9}
              {1,2}也不兼容POSIX ...今天学到了一些新知识!
                    grep,生成要传递给的URL curl等等,但是这也可能造成混淆那些习惯使用glob的人。
                    使用的语法file{1,2}为file1和file2。
$ ls
$ touch file{1,2,3,4,5,6,7,8,9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9
正如Inian在下面指出的那样... touch file{1..9}在此示例情况下,这样做会更容易...
$ ls
$ touch file{1..9}
$ ls
file1  file2  file3  file4  file5  file6  file7  file8  file9
您还可以使用多个表达式,例如:
$ ls
$ touch file{1..9}{a..z}
$ ls
file1a file1b file1c
[...]
file9x file9y file9z
是的,以上将创建234(9次26)文件。
file{1,2}  语法也可以方便地重命名文件:mv some_very_long_filename.txt{,.bak}
                    是的,您可以在bash外壳中使用括号扩展。对于仅几个文件来说,file{1..2}还是一样file{1,2}
或者,如果您担心某些情况下文件不存在,只需执行一个简单的循环,
for file in file{1..4}.txt; do
    [ -f "$file" ] || continue
    echo "$file" # Do other actions on file here
done
或者,如果仅连接是您对文件的唯一操作,并且不确定在任何时间都无法显示哪些文件,则只需对cat它们进行处理并消除错误。/dev/null如果文件不可用,将标准错误重定向为可以消除错误。
cat file{1,5}.txt 2>/dev/null
或使用glob表达式file[15],如果找不到该文件,则不会抱怨该错误。
cat file[15].txt
              file{1,5}我只缺少逗号语法!
                    
file45.txt。方括号表达式的[...]工作方式与正则表达式相同,但是用于!代替^“ not in”。一个[...]模式将始终匹配单个字符。