假设我有一个包含文件的目录,如下所示:
$ ls
file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt someotherfile.txt
假设我想运行以下命令:
$ cat file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt
我可以使用 bash 快捷方式来自动填充文件名,如下所示:cat file000
ESC *
现在是否可以以类似的方式使用快捷方式来仅根据某些正则表达式(正则表达式)自动填充?例如:cat file000[1-3]
ESC *得到:
$ cat file0001.txt file0002.txt file0003.txt
编辑:我应该在上面的示例中使用正则表达式才能更有意义:file000[1-3].txt
或file000[1-3]*
需要明确的是,我的问题是如何使用正则表达式自动填充 bash。而不是我如何cat
使用 bash 脚本或使用正则表达式的for
/while
语句将一些文件放在一起。
答案1
您正在寻找的功能就在那里。您*
的示例中只是缺少 a 。输入cat file000[1-3]*
ESC*并且它应该可以工作。我认为是这种情况,因为 readline 函数insert-completions
(绑定到ESC*)如果不匹配任何文件,则不会扩展 glob 模式。如果没有最后一个,*
它与文件不匹配。
您可以在手册页,“扩展”部分“路径名扩展”。
答案2
大括号就是你所需要的
cat file000{1,2,3}.txt
这将转换为:
cat file0001.txt file0002.txt file0003.txt