linux 正则表达式和通配符

来源:互联网 发布:在线端口检测 编辑:程序博客网 时间:2024/05/17 02:37

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

通配符用于查找文件

包含三种:  * ? []

* 代表任意个任意字符

? 代表任意一个字符

[] 代表中括号中的一个字符

 

正则表达式(正则是包含匹配,只要包含就可以匹配上,比如[0-9]可以匹配"7dfssf")

* a*表示0到n个a,这个表达没有任何含义,和 .* 意义相同

. 匹配任意一个字符 s..d 表示s和d中间含有两个任意字符的字符串

^$ 会匹配空白行

[] 与通配符中意义相同,表示中括号中间任意一个字符[0-9]代表0-9任意一个数字[a-z]

^ 在行首代表开头,如果在中括号内部代表取反[^a-zA-Z]代表包含非字母

\  转义符取消特殊符号的特殊意思 \.$ 代表一个点结尾

[0-9]\{3\} 必须连续三个数字\{1,3\}代表1次到3次


一、正则表达式:

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

正则表达式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)功能。

通配是把一个包含通配符的非具体文件名扩展存储在计算机,服务器或者网络上的一批具体文件名的过程。(可以看出通配主要应用匹配文件名上,而正则主要应用于字符串上

最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等。

符号意义*任意位的任意字符?一个任意字符^取反

1.“{}”符号

  表示一组表达式的集合。如:{[a-h]*.awk ,a?.txt}

 通配符匹配项*匹配任意多个字符(包含0个)?匹配任意一个字符(不包含0个)[characters]匹配任意一个字符集内字符[!characters]匹配任意一个不属于字符集内字符[[:class:]]匹配任意一个字符类内字符字符类说明[:alnum:]字母集或数字集[:alpha:]字母集[:digit:]数字集[:lower:]小写字母集[:upper:]大写字母集

 条件表达式

  • 文件表达式

if [ -f  file ]    如果文件存在
if [ -d ...   ]    如果目录存在
if [ -s file  ]    如果文件存在且非空 
if [ -r file     如果文件存在且可读
if [ -w file  ]    如果文件存在且可写
if [ -x file  ]    如果文件存在且可执行   

  • 整数变量表达式

if [ int1 -eq int2 ]    如果int1等于int2   
if [ int1 -ne int2 ]    如果不等于    
if [ int1 -ge int2 ]       如果>=
if [ int1 -gt int2 ]       如果>
if [ int1 -le int2 ]       如果<=
if [ int1 -lt int2 ]       如果<
   

  •    字符串变量表达式

If  [ $a = $b ]                 如果string1等于string2
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string              如果string 为空
if  [ $sting ]                  如果string 非空,返回0 (和-n类似)    

正则元字符模式含义用例\通常用于关闭其后续字符的特殊意义,恢复其原意。\(...\),这里的括号仅仅表示括号。.匹配任何单个字符。a.b,将匹配abb、acb等*匹配它之前的0-n个的单个字符。a*b,将匹配ab、aab、aaab等。^匹配紧接着的正则表达式,在行的起始处。^ab,将匹配abc、abd等,但是不匹配cab。$匹配紧接着的正则表达式,在行的结尾处。ab$,将匹配ab、cab等,但是不匹配abc。[...]方括号表达式,匹配其内部任何字符。其中-表示连续字符的范围,^符号置于方括号里第一个字符则有反向的含义,即匹配不在列表内(方括号)的任何字符。如果想让]和-表示其原意,需要将其放置在方括号的首字符位置,如[]ab]或[-ab],如这两个字符同时存在,则将]放置在首字符位置,-放置在最尾部,如[]ab-]。[a-bA-Z0-9!]表示所有的大小写字母,数字和感叹号。[^abc]表示a、b、c之外的所有字符。[Tt]om,可以匹配Tom和tom。\{n,m\}区间表达式,匹配在它前面的单个字符重复出现的次数区间,\{n\}表示重复n次;\{n,\}表示至少重复n次;\{n,m\}表示重复n到m次。ab\{2\}表示abb;ab\{2,\}表示abb、abbb等。ab\{2,4\}表示abb、abbb和abbbb。\(...\)将圆括号之间的模式存储在特殊“保留空间”。最多可以将9个独立的子模式存储在单个模式中。匹配于子模式的文本,可以通过转义序列\1到\9,被重复使用在相同模式里。\(ab\).*\1表示ab组合出现两次,两次之间可存在任何数目的任何字符,如abcdab、abab等。{n,m}(ERE)其功能等同于上面的\{n,m\},只是不再写\转义符了。ab+匹配ab、abbb等,但是不匹配a。+(ERE)和前面的星号相比,+匹配的是前面正则表达式的1-n个实例。?(ERE)匹配前面正则表达式的0个或1个。ab?仅匹配a或ab。|(ERE)匹配于|符号前后的正则表达式。(ab|cd)匹配ab或cd。[:alpha:]匹配字母字符。[[:alpha:]!]ab$匹配cab、dab和!ab。[:alnum:]匹配字母和数字字符。[[:alnum:]]ab$匹配1ab、aab。[:blank:]匹配空格(space)和Tab字符。[[:alnum:]]ab$匹配1ab、aab。[:cntrl:]匹配控制字符。[:digit:]匹配数字字符。[:graph:]匹配非空格字符。[:lower:]匹配小写字母字符。[:upper:]匹配大写字母字符。[:punct:]匹配标点字符。[:space:]匹配空白(whitespace)字符。[:xdigit:]匹配十六进制数字。\w匹配任何字母和数字组成的字符,等同于[[:alnum:]_]\W匹配任何非字母和数字组成的字符,等同于[^[:alnum:]_]\<\>匹配单词的起始和结尾。\<read匹配readme,me\>匹配readme。
原创粉丝点击