Linux拓展通配符的使用

来源:互联网 发布:如何申请网络教育平台 编辑:程序博客网 时间:2024/06/05 13:33

          最近学习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})domv $file java/donefor file in $(ls *.{[coh],out,cpp})domv $file c/donefor file in $(ls *.sh)doif echo $file | grep "move"thenecho $fileelsemv $file shell/fidoneexit 0

       最前面的{java,class}就是把匹配文件后缀为java和class的给提取出来,而c语言的文件有点多,后缀有c、o、h、out、cpp,这时候就用到两个的合用,{[coh],out,cpp}就是把这些匹配的都提取出来。而第三个就麻烦了一些,因为要防止我们的脚本文件被提取出来,所以加了个判断。

       这就是我对通配符和拓展通配符的一些小的见解,如有问题,欢迎指正大笑

0 0
原创粉丝点击