linux檔名匹配 萬用字元的使用

2021-10-05 20:32:17 字數 1833 閱讀 6823

linux檔名匹配——萬用字元使用

1 掃盲

2 萬用字元詳細介紹

3 例項

背景:在linux使用過程中,經常需要查詢檔案,對命令中的萬用字元pattern和正規表示式的區分不是很清楚。有必要好好研究一下。

回到頂部

1 掃盲

1.1 萬用字元和正規表示式

當在使用命令行時,有很多時間都用來查詢你所需要的檔案,如ls find等。 s h e l l提供了一套完整的字串模式匹配規則,或者稱之為元字元,當s h e l l遇到上述字元時,就會把它們當作特殊字元,而不是檔名中的普通字元,這樣使用者就可以用它們來匹配相應的檔名,我理解這可以稱為萬用字元。

萬用字元與正規表示式是有區別的,簡單來說:萬用字元是用來通配的,正規表示式是用來匹配字串的;
在文字過濾工具裡,都是用正規表示式,比如像awk,sed,等,是針對檔案的內容的。

而萬用字元多用在檔名上,比如查詢find,ls,cp,等等。

其次,shell對萬用字元與正規表示式的處理也有不同,「 」內一般為萬用字元(是shell本身提取處理),『 』內一般為正規表示式(shell會將其中的資料傳遞給其它命令處理)。

回到頂部

2 萬用字元詳細介紹

測試資料

touch a a6.log abc.log ac.txt b c c5.txt x.log a

「*」代表任意多個字元

例:查詢以".log"結尾的檔案

ll *.log

「?」代表任意單個字元

例:只查詢a、b、c

ll ?

「」代表「[」和「]」之間的某乙個字元,比如[0-9]可以代表0-9之間的任意乙個數字,[a-za-z]可以代表a-z和a-z之間的任意乙個字母,字母區分大小寫。

例:只查詢字母檔案

ll [a-za-z]

例:查詢以「.log」結尾且「.log」前只有兩個字元的檔案且第二個字元是數字

ll ?[0-9].log

「^」表示匹配結果取反的意思,注意這個萬用字元必須要在中使用

例:查詢不是以「.txt」結尾的檔案

ll [^txt]

「{}」

表示符合括號內包含的多個檔案

例:查詢『.log』和「.txt」結尾的檔案

ll 注意: 「.」這個符合比較特殊,如果匹配的條件加上了該符合那麼說明查詢結果檔案就包含帶「.」的檔案

例如前面的「^」的例子,如果我這樣查詢「ll .[^txt]」,那麼結果就不一樣了

刪除操作

例如:刪除a、b、c和以.txt結尾的檔案

rm -f

當然既然可以查詢當然也可以使用萬用字元匹配的方式進行移動檔案,如果需要在存在很多檔案的資料夾中移動某些型別的檔案那麼使用萬用字元匹配的效率就顯而易見了;當時萬用字元的使用技巧不單單只有這些,有空的可以多去研究。

回到頂部

3 例項

複製**

? 匹配檔名中的任何單個字元。

[…] 匹配[ ]中所包含的任何字元。

[!..] 匹配[ ]中非感嘆號!之後的字元。和^的效果一樣

複製**

如:5* 5開頭的所有字串

*5 5結尾的所有字串

*5? 以5為倒數第二個字元的字串

[0-9] 所有以數字的字元

[1,2] 1或者2

[!0-9] 不是數字的字元

ls /etc/[!a-n]*.conf 列出/etc/目錄中不是以字母a到n開頭的,並且以.conf結尾的檔案

ls /etc/[a-n]*.conf 列出/etc/目錄中以字母a到n開頭的,並且以.conf結尾的檔案

ls /bin/[ck]* 列出以 c或k開頭的檔名

linux檔名匹配(萬用字元使用)

當在使用命令行時,有很多時間都用來查詢你所需要的檔案,如ls find等。s h e l l提供了一套完整的字串模式匹配規則,或者稱之為元字元,當s h e l l遇到上述字元時,就會把它們當作特殊字元,而不是檔名中的普通字元,這樣使用者就可以用它們來匹配相應的檔名,我理解這可以稱為萬用字元。萬用字...

檔名萬用字元

1 單字元匹配元字元 元字元 表示匹配檔名中任意乙個字元,連續使用多個元字元 可以表示多個任意字元。1 例如要檢視有兩個字元且第乙個字母是a的檔案 root localhost zhu ls l a?rw r r 1 root root 0 dec 6 09 46 ab rw r r 1 root ...

linux檔名匹配

匹配檔名中的任何字串,包括空字串。匹配檔名中的任何單個字元。匹配 中所包含的任何字元。匹配 中非感嘆號!之後的字元。如 s s開頭的所有字串 s s結尾的所有字串 s?以s為倒數第二個字元的字串 0 9 所有以數字的字元 a,b a或者b 0 9 不是數字的字元 ls user a n sh 列出 ...