linux通配符
在使用shell命令對多個文件對象執(zhí)行單一操作時,例如刪除當(dāng)前目錄下的file1到file8,多次使用相同的命令rm file1到rm file8非常麻煩,通常使用通配符模式解決這個問題:rm file[1-8]。 當(dāng)使用通配符指定一種模式時,該模式與底層系統(tǒng)上的一個或多個文件匹配,shell以空格隔開的所有匹配對象的列表來替換該模式;當(dāng)模式不能找到匹配對象時,shell將不理會參數(shù)、通配符等,保留原樣。例如,當(dāng)ls -d /etc/g*不能找到/etc/g*的任何文件時,就會報錯。
* --------代表任意個字符,但不會匹配以.開始的文件名 --------代表一個字符 / --------轉(zhuǎn)義字符,可將通配符或者特殊字符還原成一般字符 [abc] --------匹配[]里面的某個字符 [a-z] --------匹配a到z之間的某個字符,還能寫成[A-Z]、[0-9]、[A-Za-z]等 [!abc] --------匹配任意不包含在[!]里的字符,同樣包括[!a-z]等的用法,這里[和!之間不能有空格 {c1,c2} --------同c1或者c2相匹配,其中c1和c2也是通配符,比如{[0-9]abc,[efg]}與[0-9]abc、[efg]均通配 ; --------連續(xù)性命令,比如command1;command2,不管前者是否正確,后者都會執(zhí)行,使用&&和||則會有先后順序 ! --------邏輯運算中的非 / --------路徑字符 $ --------讀取變量字符,例如echo $PATH >,>> --------輸出導(dǎo)向,分別為清空與末尾累加 ' --------單引號 ' --------雙引號 `` --------兩個`中間為可以先執(zhí)行的指令,例如cat /etc/`pwd`/hello.
注意: 使用[]時,[與]之間絕對不能為空,所以[][*]表示[、]與*任意一個字符來匹配,如果要處理與通配符相關(guān)的字符,需要使用轉(zhuǎn)義字符/,例如: echo $[abc] 輸出結(jié)果是a、b或者c變量的值。 echo $/[abc/] 輸出結(jié)果是[abc]變量的值(舉例而已,當(dāng)然不存在[abc]這樣的變量名)。 echo '[abc]' 單引號也能起到與轉(zhuǎn)義字符同樣的作用。雙引號內(nèi)部保留所有通配符的原義,而單引號內(nèi)部將通配符視為普通字符。
2.DOS通配符相比較 與DOS相比,UNIX的通配符機制要比DOS好得多。在DOS中,任何在“*”之后,在“.”之后的字符均被忽略,所以下面的指令將不能得到你想象的結(jié)果。 del *bak.* 在DOS中,用戶只能用此命令刪除當(dāng)前目前下的所有文件,除非系統(tǒng)要求你不這樣做。而在UNIX系統(tǒng)中,“*”可替代包括0在內(nèi)的任意數(shù)字的字符,但一行中的其余特征也仍需匹配,因此“bak.*”可匹配newbak.save、oldbak.new甚至bak.temp,但不能和newbak匹配,因為后者不含“.”。這非常巧妙,可大大方便用戶,而“*bak”則可匹配以上所有的詞條,包括newbak。
|