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

moo*_*moo 5 command-line bash autocomplete filenames regular-expression

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

$ ls
file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt someotherfile.txt
Run Code Online (Sandbox Code Playgroud)

假设我想运行以下命令:

$ cat file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt 
Run Code Online (Sandbox Code Playgroud)

我可以使用 bash 快捷方式实现这一点,如下所示自动填充文件名: cat file000 ESC *

现在是否可以以类似的方式使用快捷方式来仅根据某些正则表达式(正则表达式)自动填充?例如:cat file000[1-3] ESC *得到:

$ cat file0001.txt file0002.txt file0003.txt
Run Code Online (Sandbox Code Playgroud)

编辑:我应该在上面为这个例子使用的正则表达式更有意义:file000[1-3].txtfile000[1-3]*

为了清楚起见,我的问题是关于如何使用正则表达式自动填充 bash。而不是我如何cat使用 bash 脚本或for/while使用正则表达式的语句将一些文件放在一起。

Luc*_*cas 6

您正在寻找的功能就在那里。你只是*在你的例子中缺少 a 。键入cat file000[1-3]*ESC*它应该可以工作。我认为是这种情况,因为 readline 函数insert-completions(绑定到ESC*)不会扩展 glob 模式,如果它不匹配任何文件。如果没有最后一个,*它与文件不匹配。

您可以在手册页的“扩展”部分“路径名扩展”小节中阅读有关此内容的信息。

  • 好的,显然 Debian 的 bash 完成设置会否决某些内容,因此 [Esc][\*] 无法按预期工作。(我假设可以在 `/usr/share/bash-completion/bash_completion` 文件的近 2000 行中找到解决方案,但我没有时间调试。) (2认同)