有没有办法使用正则表达式在 bash 中自动填充文件名?

有没有办法使用正则表达式在 bash 中自动填充文件名?

假设我有一个包含文件的目录,如下所示:

$ 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].txtfile000[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

相关内容