linux 正则表达式和通配符
2017-05-22 12:28
176 查看
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)是由一串字符和元字符构成的字符串。
正则表达式的主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。实际上正则表达式完成了数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。
基本的正则表达式元字符集合及其意义
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]* :匹配任意英文单词
扩展的正则表达式元字符及其意义
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}
条件表达式
文件表达式
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类似)
通配符用于查找文件
包含三种: * ? []
* 代表任意个任意字符
? 代表任意一个字符
[] 代表中括号中的一个字符
正则表达式(正则是包含匹配,只要包含就可以匹配上,比如[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次 |
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中 |
| | 表示“或”,匹配一组可选的字符 |
(根据测试可以不包括前面的字符,即匹配0次)
2."()"符号和“|”符号
"()"符号和“|”符号通常结合使用,表示一组可选字符的集合。
re(a|b|c)d 等价于 re[abc]d
"|"符号也可以表示多个正则表达式的“或”关系。
grep -E “zha?ng|zhi” 文件
三、通配符:
bash shell本身不支持正则表达式,使用正则表达式的是shell命令和工具,如grep,sed,awk。bash shell可以使用正则表达式中的一些元字符实现通配(Globbing)功能。
通配是把一个包含通配符的非具体文件名扩展存储在计算机,服务器或者网络上的一批具体文件名的过程。(可以看出通配主要应用匹配文件名上,而正则主要应用于字符串上)
最常用的通配符包括正则表达式元字符:?、*、[]、{}、^等。
符号 | 意义 |
* | 任意位的任意字符 |
? | 一个任意字符 |
^ | 取反 |
表示一组表达式的集合。如:{[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。 |
相关文章推荐
- Linux_正则表达式(2.通配符,sed)
- linux通配符和正则表达式
- linux中的通配符与正则表达式
- linux下的通配符与正则表达式
- Linux通配符和正则表达式的异同
- linux通配符与正则表达式
- Linux 系统的通配符与正则表达式
- linux下通配符与正则表达式
- Linux 正则表达式与通配符
- Linux学习笔记—day2(3.13)------基本命令,通配符,正则表达式
- Linux正则表达式-通配符
- Linux之正则表达式及通配符
- linux中的通配符与正则表达式
- linux初学习之正则表达式和通配符
- linux中的正则表达式和通配符
- Linux运维学习笔记-通配符及正则表达式知识总结
- Linux通配符与正则表达式
- linux 命令系列之 正则表达式和通配符(53)
- Linux中通配符与正则表达式
- linux通配符和正则表达式 + notepad++