Bash

有沒有辦法使用正則表達式在 bash 中自動填充文件名?

  • July 11, 2019

假設我有一個包含文件的目錄,如下所示:

$ 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使用正則表達式的語句將一些文件放在一起。

您正在尋找的功能就在那裡。您只是*在範例中缺少 a 。鍵入cat file000[1-3]*``ESC``*它應該可以工作。我認為是這種情況,因為如果 readline 函式insert-completions(綁定到ESC``*)不匹配任何文件,它將不會擴展 glob 模式。如果沒有最後一個*,它與文件不匹配。

您可以在手冊頁的“擴展”小節“路徑名擴展”部分中閱讀有關此內容。

大括號是你需要的

cat file000{1,2,3}.txt

這將轉換為:

cat file0001.txt file0002.txt file0003.txt

引用自:https://unix.stackexchange.com/questions/274820