Linux拓展通配符的使用

          最近學習Linux程序設計,涉及到關於通配符的使用問題,在看了書之後有了一些心得,現在分享如下。

       常用通配符有:*,?。“ * ”是用來匹配多個字符的,而“?”則是用來匹配單個字符的。然而,有的時候我們可能只是想匹配某幾個字符串或者幾個字符,這個時候拓展通配符就可以派上用場了。

       拓展通配符有“[...]”,"{..,..}"兩種,前一個是對中括號內的單個字符進行匹配,如【abc】就是匹配a或者b或者c這3個字符,在【後面加上" ! "或者“ ^ ”,就可以實現非匹配的模式,如【!abc】或者【^abc】就可以匹配出了a、b、c之外的字符了;而" {} "則是匹配多個字符串的,中間用逗號隔開,如{abc,bcd},就是匹配abc或者bcd這2個字符串。

       下面就具體的案例進行實際的解釋:

       假設當前文件夾下有以下文件:

       我們想要實現分類的效果,把屬於c的文件放到c的文件夾裏面,而屬於Java的文件放到Java文件夾裏面,把屬於shell腳本的文件放到shell文件夾裏面,而且不能把move文件放進去,因此,我們可以寫一個如下所示的程序來實現分類的效果:

for file in $(ls *.{java,class})
do
	mv $file java/
done

for file in $(ls *.{[coh],out,cpp})
do
	mv $file c/
done

for file in $(ls *.sh)
do
	if echo $file | grep "move"
	then
		echo $file
	else
		mv $file shell/
	fi
done
exit 0

       最前面的{java,class}就是把匹配文件後綴爲java和class的給提取出來,而c語言的文件有點多,後綴有c、o、h、out、cpp,這時候就用到兩個的合用,{[coh],out,cpp}就是把這些匹配的都提取出來。而第三個就麻煩了一些,因爲要防止我們的腳本文件被提取出來,所以加了個判斷。

       這就是我對通配符和拓展通配符的一些小的見解,如有問題,歡迎指正大笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章