Linux下Shell编程——通配

通配

bash Shell本身不支持正则表达式,使用正则表达式的是Shell命令和工具,如grep、sed、awk等。但是,bash Shell可以使用正则表达式中的一些元字符实现通配(Globbing)功能,通配是把一个包含通配符的非具体文件名扩展存储在计算机、服务器或者网络上的一批具体文件名的过程。

 

例:列出以.awk结尾文件的详细信息

执行:ls -l *.awk

结果:-rwxrwxr-x 1 xiaomiaoxiaomiao  59 8月  28 16:32 argv.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao  80 8月  28 16:17 array.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao 186 8月  28 16:45findphone.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao  73 8月  28 15:19 pass.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao  50 8月  28 09:29 scr1.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao  77 8月  28 11:15 scr2.awk

      -rw-rw-r-- 1 xiaomiao xiaomiao  36 8月  28 09:23 scr.awk

 

例:列出以a~h范围内字母开头,以.awk结尾的文件

执行:ls -l [a-h]*.awk

结果:-rwxrwxr-x 1 xiaomiaoxiaomiao  59 8月  28 16:32 argv.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao  80 8月  28 16:17 array.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao 186 8月  28 16:45findphone.awk

 

例:列出以g~h范围内字母开头,不以.awk结尾的文件

执行:ls -l [g-h]*.[^awk]*

结果:-rwxrwxr-x 1 xiaomiaoxiaomiao  280 8月  17 17:16getopts_exam1.sh

      -rwxrwxr-x 1 xiaomiao xiaomiao  286 8月  17 17:15getopts_exam1.sh~

      -rwxrwxr-x 1 xiaomiao xiaomiao  466 8月  17 17:04getopts_exam2.sh

      -rwxrwxr-x 1 xiaomiao xiaomiao  466 8月  17 17:00getopts_exam2.sh~     -rw-r--r-- 1 root     root    2760 8月  23 14:32 gmond_msg_1.txt

      -rwxrwxr-x 1 xiaomiao xiaomiao  364 8月  22 10:13 htmlconver2.sh

      -rwxrwxr-x 1 xiaomiao xiaomiao  333 8月  22 09:52htmlconver.sh

      -rwxrwxr-x 1 xiaomiao xiaomiao  331 8月  22 09:51htmlconver.sh~

 

例:列出匹配[a-c]*.awk或0?.pem的所有文件

执行:ls -l{[a-c]*.awk,0?.pem}

结果:ls: 无法访问0?.pem: 没有那个文件或目录

      -rwxrwxr-x 1 xiaomiao xiaomiao 59 8月  28 16:32 argv.awk

      -rwxrwxr-x 1 xiaomiao xiaomiao 80 8月  28 16:17 array.awk

注意,{}符号内的表达式是“或”的关系,即只要有{}符号内的一个表达式的文件,就能被列出。

 

通配的结果由计算机搜索大量的文件或者目录进行匹配而输出,通配对处理能力和内存资源有很高的需求。黑客输入包含通配符的文件名故意让服务器重复和连续不断地进行通配可能引起的拒绝服务攻击。因此,大型服务器经常通过限制服务器执行通配功能的次数、限制一个具体用户每次输入的通配符或者如果通配符太普通,则拒绝执行通配等方法来提高服务器的安全性。

 

内部变量GLOBIGNORE保存了通配时所忽略的文件名集合,?、*、[]、{}、^五个符号和GLOBIGNORE变量构成了Shell通配的所有内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值