shell 通配符和正则表达式理解和区别

一、正则表达式:

元字符是用来阐释字符表达式意义的字符,简言之,就是用来描述字符的字符。

正则表达式RE(Regular Expression)是由一串字符和元字符构成的字符串。

正则表达式的主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。实际上正则表达式完成了数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。

 

                        基本的正则表达式元字符集合及其意义

符号意义
*0个或多个在*字符之前的那个普通字符和前面字符可以看成一个字符
.匹配任意字符
^匹配行首,或后面字符的非
$匹配行尾
[]匹配字符集合
\转义符,屏蔽一个元字符的特殊意义
\<\>精确匹配符号
\{n\}匹配前面字符出现n次  P.43
\{n,\}匹配前面字符至少出现n次
\{n,m\}匹配前面字符出现n~m次

1.“*”符号(和前面字符可以看成一个字符)

  zha*ng  :“*”前面的普通字符是a,就表示匹配a字符0次或多次,如:zhng、zhang、zhaaaang

  (根据测试可以不包括前面的字符,即匹配0次

2.匹配空行

  匹配行首的^和匹配行尾的$组合起来“^$”可以用来匹配空行,如果需要匹配只包含一个字符的行,可以用“^.$”

3."[]"符号

  匹配字符集合,支持穷举方法列出字符集合的所有元素,也支持使用“-”符号表示字符集合范围

  [12345] 等价于 [1-5]

  我们知道“^”符号表示匹配行首,但是,“^”符号放到“[]”符号中就不再表示匹配行首了,而是表示取反符号。

  [^b-d]  :表示不再b~d范围内的字符

  [A-Za-z] [A-Za-z]*  :匹配任意英文单词

二、正则表达式的扩展:

                扩展的正则表达式元字符及其意义

符号意义
匹配0个或一个在其之前的那个普通字符
+匹配一个或多个在其之前的那个普通字符
()表示一个字符集合或用在expr中
|表示“或”,匹配一组可选的字符

1.“?”符号

  (根据测试可以不包括前面的字符,即匹配0次

2."()"符号和“|”符号

  "()"符号和“|”符号通常结合使用,表示一组可选字符的集合。

  re(a|b|c)d  等价于  re[abc]d

  "|"符号也可以表示多个正则表达式的“或”关系。

  grep -E “zha?ng|zhi”  文件

三、通配符:

bash shell本身不支持正则表达式,使用正则表达式的是shell命令和工具,如grep,sed,awk。

注意:bash shell只可以使用正则表达式中的一些元字符实现通配(Globbing)功能。

通配是把一个包含通配符的非具体文件名扩展一批具体文件名的过程

总结:可以看出通配主要应用匹配文件名上,而正则主要应用于字符串上

* - 通配符,代表任意字符(0到多个)
? - 通配符,代表一个字符

^ 取反

\ - 跳转符号,将特殊字符或通配符还原成一般符号
| - 分隔两个管线命令的界定
; - 连续性命令的界定
~ - 用户的根目录
$ - 变量前需要加的变量值
! - 逻辑运算中的"非"(not)
‘ - 单引号,不具有变量置换功能
" - 双引号,具有变量置换功能


本文出自 “坤哥的blog” 博客,请务必保留此出处http://kunge.blog.51cto.com/976628/1585958

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。