设为首页 收藏本站
查看: 709|回复: 0

Shell编程之通配符

[复制链接]

尚未签到

发表于 2018-8-22 06:05:33 | 显示全部楼层 |阅读模式
  Bash Shell本身不支持正则表达式,使用正则表达式的是Shell命令和工具,如grep、sed、awk
  等。但是,Bash Shell可以使用正则表达式中的一些元字符实现通配(Globbing)功能。
  通配是把一个包含通配符的非具体文件名扩展存储在计算机、服务器或者网络上的一批具体文件
  名的过程。最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等。这些元字符在通配中的意义
  与正则表达式中的意义不完全一致,*符号不再表示其前面字符的重复,而是表示任意位的任意字
  符,?字符表示一个任意字符,^符号在通配中不代表行首,而是代表取反。
  例如,如果一个用户不知道在一个扩展名为.conf的文件名中前缀是如何拼写的,是 prelink还
  是prilink。这时用户可以输入:
pr*link.conf  下面举几个例子来说明通配的使用和通配元字符的意义,这些例子都用ls命令进行通配,ls 命令是Linux 下最常用的命令之一,它用于列出目录下的文件,它可以有很多选项,ls -l表示列出文件的详细信息,ll命令等价于ls -l命令。/usr/local/zabbix/etc 目录下的所有文件如下所示:
[root@zabbix etc]# pwd  
/usr/local/zabbix/etc
  
[root@zabbix etc]# ll
  
总计 36
  
-rw-r--r-- 1 root root  1601 11-06 12:18 zabbix_agent.conf
  
drwxr-xr-x 2 root root  4096 11-06 12:18 zabbix_agent.conf.d
  
-rw-r--r-- 1 root root  7191 11-14 11:46 zabbix_agentd.conf
  
drwxr-xr-x 2 root root  4096 11-06 12:18 zabbix_agentd.conf.d
  
-rw-r--r-- 1 root root 10534 11-06 18:19 zabbix_server.conf
  
drwxr-xr-x 2 root root  4096 11-06 12:18 zabbix_server.conf.d
  /usr/local/zabbix/etc 目录下包含三个子目录,子目录的详细信息以d 开头,d 表示directory的意思,其他以横杠(-)开头的都是文件。
  如果我们仅需要列出/usr/local/zabbix/etc 目录下以.conf 结尾的文件,就可以使用*.conf 匹配所有以.conf结尾的文件,如下所示:
#列出以.conf结尾的文件的详细信息  
[root@zabbix etc]# ll *.conf
  
-rw-r--r-- 1 root root  1601 11-06 12:18 zabbix_agent.conf
  
-rw-r--r-- 1 root root  7191 11-14 11:46 zabbix_agentd.conf
  
-rw-r--r-- 1 root root 10534 11-06 18:19 zabbix_server.conf
  如果我们需列出以zabbix_s开头、后面跟5 个字符且以.conf 为后缀的文件,可以使用zabbix_s?????.conf来匹配这些文件,如下面所示。
#列出以zabbix_s开头后跟5个字母,以conf结尾的文件  
[root@zabbix etc]# ls -l zabbix_s?????.conf
  
-rw-r--r-- 1 root root 10534 11-06 18:19 zabbix_server.conf
  下面举一个用[]符号进行通配的例子,若我们需列出在l~n范围内以字母开头并以.conf结尾的文件,我们可以用[l-n]*.conf来匹配这些文件,如下面所示。
  目录/etc 下有248个文件及目录:
[root@zabbix etc]# pwd  
/etc
  
[root@zabbix etc]# ll | wc -l
  
248
  列出以l~n范围内字母开头,且以.conf结尾的文件的详细信息
[root@zabbix etc]# ll [l-n]*.conf  
-rw-r--r-- 1 root root  9111 10-30 15:58 ldap.conf
  
-rw-r--r-- 1 root root   124 11-06 15:31 ld.so.conf
  
-rw-r--r-- 1 root root  3544 2013-01-09 lftp.conf
  
-rw-r----- 1 root root   191 2011-10-27 libaudit.conf
  
-rw-r--r-- 1 root root  2506 10-30 15:58 libuser.conf
  
-rw-r--r-- 1 root root   619 2012-06-04 logrotate.conf
  
-rw-r--r-- 1 root root 10814 2006-02-21 ltrace.conf
  
-rwxr-xr-x 1 root root  2242 2011-05-19 mcelog.conf
  
-rw-r--r-- 1 root root   330 2013-05-09 mke2fs.conf
  
-rw-r--r-- 1 root root   315 10-30 15:59 modprobe.conf
  
-rw-r--r-- 1 root root  1983 2007-01-07 mtools.conf
  
-rw-r--r-- 1 root root  2706 10-02 06:18 multipath.conf
  
-rw-r--r-- 1 root root  1895 10-01 18:22 nscd.conf
  
-rw-r--r-- 1 root root  1717 10-30 15:39 nsswitch.conf
  
-rw-r--r-- 1 root root  1839 2011-11-18 ntp.conf
  可见结果确实仅列出以l~n 范围内字母开头且以.conf 结尾的文件。
  如果我们要列出以l~n范围内字母开头且句点后不是以.conf结尾的文件,可以使用[l-n]*.[^conf]*来匹配这些文件,句点后面方括号内使用"^"符号表示取反,即除去c、o、n和f这四个字母,而且最后一个*符号必不可少,否则句点后仅匹配一个字符,下面命令给出了[l-n]*.[^conf]*的匹配结果。
  列出以l~n范围内字母开头,不以.conf结尾的文件
[root@zabbix etc]# ll [l-n]*.[^conf]*  
-rw-r--r-- 1 root root 105305 11-06 16:19 ld.so.cache
  
-rw-r--r-- 1 root root    124 11-06 15:31 ld.so.conf
  
-rw-r--r-- 1 root root   1522 10-30 15:58 login.defs
  
-rw-r--r-- 1 root root    112 2007-01-07 mail.rc
  
-rw-r--r-- 1 root root  14100 2007-01-07 mime.types
  
-rw-r--r-- 1 root root   1112 2007-01-07 minicom.users
  
-rw-r--r-- 1 root root      0 2012-08-06 Muttrc.local
  
-rw-r--r-- 1 root root    441 2013-01-23 my.cnf.rpmnew
  由上可知,[]符号的意义与正则表达式中[]符号的意义一样,那么通配中的花括号"{}"表示何种意义呢?正则表达式中只有在花括号前加上转义符的用法,即\{\},用于限制匹配字符的个数。但是,通配中的{}符号表示一组表达式的集合,如:
{[l-n]*.conf ,y?.conf}  上述通配表示满足[l-n]*.conf或y?.conf的所有文件,下面给出了这一通配的执行结果。
  列出匹配[l-n]*.conf 或 y?.conf的所有文件
[root@zabbix etc]# ll {[l-n]*.conf,y?.conf}  
-rw-r--r-- 1 root root  9111 10-30 15:58 ldap.conf
  
-rw-r--r-- 1 root root   124 11-06 15:31 ld.so.conf
  
-rw-r--r-- 1 root root  3544 2013-01-09 lftp.conf
  
-rw-r----- 1 root root   191 2011-10-27 libaudit.conf
  
-rw-r--r-- 1 root root  2506 10-30 15:58 libuser.conf
  
-rw-r--r-- 1 root root   619 2012-06-04 logrotate.conf
  
-rw-r--r-- 1 root root 10814 2006-02-21 ltrace.conf
  
-rwxr-xr-x 1 root root  2242 2011-05-19 mcelog.conf
  
-rw-r--r-- 1 root root   330 2013-05-09 mke2fs.conf
  
-rw-r--r-- 1 root root   315 10-30 15:59 modprobe.conf
  
-rw-r--r-- 1 root root  1983 2007-01-07 mtools.conf
  
-rw-r--r-- 1 root root  2706 10-02 06:18 multipath.conf
  
-rw-r--r-- 1 root root  1895 10-01 18:22 nscd.conf
  
-rw-r--r-- 1 root root  1717 10-30 15:39 nsswitch.conf
  
-rw-r--r-- 1 root root  1839 2011-11-18 ntp.conf
  
-rw-r--r-- 1 root root   585 2011-06-30 yp.conf
  注意: {}符号内的表达式是"或"的关系,即只要符合{}符号内的一个表达式的文件,就能被列出。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554789-1-1.html 上篇帖子: shell编程学习之sed 下篇帖子: shell转置小案例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表