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

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

Shell编程之通配符相关推荐

  1. Shell编程之通配符和用户自定义变量

    测试:

  2. Linux Shell常用技巧(十二) Shell编程

    二十三. Bash Shell编程:  1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如 ...

  3. shell编程中for/while/util/case/select/break/continue

    2019独角兽企业重金招聘Python工程师标准>>> Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.w ...

  4. Bourne Shell及shell编程

    Bourne Shell及shell编程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  5. Powershell快速入门(二) Shell编程

    这一部分着重于介绍Powershell的程序知识,让我们能够编写功能强大的Powershell脚本,执行比较复杂的任务. 变量 变量使用$变量名创建和引用.举个例子,Get-Location命令用于获 ...

  6. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  7. linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记

    SHELL编程一UNIX和Shell工具简介 什么是shell? shell只是一个程序,它在系统中没有特权.因此,有多个不同风格shell共同存在原因--Bourne Shell,Korn Shel ...

  8. UNIX再学习 -- shell编程

    UNIX环境高级编程看了三章,遇到不少重定向等shell命令.本想到Linux时再讲,看来有必要提前了.之前有看过一本<嵌入式Linux软硬件开发详解>这本书里有简单介绍了一部分shell ...

  9. Shell 编程进阶笔记

    这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考.大家可以选择略过也可以作参考. (一)Linux 初步笔记 (二)Linux 进阶笔记(一) (三)Linux 进阶笔记(二) (四) ...

最新文章

  1. 世界人工智能大赛方案解析!
  2. egret 发布android原生项目(一)打包apk
  3. salesforce学习框架图
  4. 用Tableau制作滚动时间轴(上)
  5. python怎么打开笔记本无线网络开关_如何轻松搞定 笔记本搜不到WIFI信号问题
  6. 使用fetch函数发送ajax
  7. demo16 webpack 处理字体
  8. 推荐系统组队学习——协同过滤
  9. Delphi 11.0 Alexandria 来了
  10. 抽数,数据抽取,增量数据的抽取方式
  11. python矩阵连乘_python动态规划解决矩阵连乘
  12. PPT文件不能编辑怎么回事?
  13. SQLITE 获取本地时间
  14. MySQL - 全局锁、表级锁、行级锁、元数据锁、自增锁、意向锁、共享锁、独占锁、记录锁、间隙锁、临键锁、死锁
  15. 高中计算机在线使用方法,高中-信息技术-手动搜题-在线组卷
  16. NUMA为何成为云计算的关键技术
  17. c++读取wav音频方法
  18. 盘点SQL中最难的5件事
  19. SpringCloud 微服务开放平台接口
  20. 条码标签打印机可能遇到哪些问题

热门文章

  1. 程序员编程知识经验总结
  2. 使用Travis-CI 与 Github Webhook自动部署你的页面
  3. Scala 专题指南
  4. android cpp 调用 shell命令
  5. 搭建MIPS平台GDB调试环境
  6. android Viewpager HorizontalScrollView 实现分页栏拖拽
  7. 中移动总裁李跃:发展Wifi才是长久之计
  8. 免杀需要的基本汇编知识
  9. MaxCompute,基于Serverless的高可用大数据服务 1
  10. 给 console 添加颜色