![有没有办法使用正则表达式在 bash 中自动填充文件名?](https://linux22.com/image/87092/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%9C%A8%20bash%20%E4%B8%AD%E8%87%AA%E5%8A%A8%E5%A1%AB%E5%85%85%E6%96%87%E4%BB%B6%E5%90%8D%EF%BC%9F.png)
假设我有一个包含文件的目录,如下所示:
$ 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