指定一个或两个字符的通配符是什么?

指定一个或两个字符的通配符是什么?

有没有更简单的写法: wc -l foo?.txt foo??.txt

由于我的情况(最多)有两位数字,我尝试使用范围规范wc -l foo[1-99].txt,但最终只显示 1 到 9 之间的结果(而不是 99)。但这是一个(无效的)黑客,我真的需要类似的东西wc -l foo[?,??].txt

答案1

当你有两个或更多选择时,使用括号扩展

foo{?,??}.txt

或者更具体地说:

foo{[0-9],[0-9][0-9]}.txt

例子

让我们考虑一个包含以下三个文件的目录:

$ ls foo*txt
foo111.txt  foo11.txt  foo1.txt

观察:

$ echo foo{?,??}.txt
foo1.txt foo11.txt

和:

$ echo foo{[0-9],[0-9][0-9]}.txt
foo1.txt foo11.txt

或者更简洁地说:

$ echo foo{,[0-9]}[0-9].txt
foo1.txt foo111.txt

答案2

使用 bash 的扩展的 glob( extglob) 语法,您可以使用foo@(?|??)例如

wc -l foo@(?|??).txt

在当前版本的 Ubuntu 交互式 shell 中,该extglob选项应该默认启用,但如果没有,你可以使用以下命令启用它

shopt -s extglob

相关内容