如何匹配bash中的多个单词

时间:2012-05-28 06:44:28

标签: bash

我想列出名称模式的文件,如[max | min] .txt,所以执行 在bash shell中ls [max|min].txt,但它不起作用,我得到的错误信息是: ls:无法访问[max:没有此类文件或目录

那么做这项工作的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

方括号用于字符匹配,垂直条用于管道。您正在寻找brace expansion

ls {max,min}.txt

答案 1 :(得分:1)

Bash有一个名为extglob的shell选项,您可以使用命令shopt -s extglob启用它。这将允许您使用模式格式@(pattern-list),其中pattern-list是以管道分隔的模式列表。它将与文件名匹配,并将排除任何与文件名不匹配的模式,就像[abc]范围表达式一样。 Bash也有大括号扩展,但这似乎不是你要求的,因为大括号扩展与文件名不匹配或像通配符或范围表达式一样扩展。

$ shopt -s extglob
$ touch max.txt min.txt
$ echo @(max|min).txt
max.txt min.txt
$ echo @(min|mid|max).txt
max.txt min.txt
$ echo {min,mid,max}.txt
min.txt mid.txt max.txt

有关上述命令序列的几点注意事项:

  1. echo @(mid|min|max).txt未输出mid.txt,因为没有匹配的文件。
  2. echo @(min|mid|max).txt以与通配符扩展相同的方式重新排序要排序的输出。
  3. echo {min,mid,max}.txt是大括号展开,按照给定的顺序输出所有元素。