首先正则表达式分为三类(mangrep可以看到,分别是basicRegExs,extendedRegExs,perlRegExs)
正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
一、正则表达式分类:
1、基本的正则表达式(BasicRegularExpression又叫BasicRegEx 简称BREs)
2、扩展的正则表达式(ExtendedRegularExpression又叫ExtendedRegEx简称EREs)
3、Perl的正则表达式(PerlRegularExpression又叫PerlRegEx简称PREs)
说明:只有掌握了正则表达式,才能全面地掌握Linux下的常用文本工具(例如:grep、egrep、GUNsed、Awk等)的用法
二、Linux中常用文本工具与正则表达式的关系
常握Linux下几种常用文本工具的特点,对于我们更好的使用正则表达式是很有帮助的
grep,egrep正则表达式特点:
1)grep支持:BREs、EREs、PREs正则表达式
grep指令后不跟任何参数,则表示要使用”BREs“
grep指令后跟”-E"参数,则表示要使用“EREs“
grep指令后跟“-P"参数,则表示要使用“PREs"
2)egrep支持:EREs、PREs正则表达式
egrep指令后不跟任何参数,则表示要使用“EREs”
egrep指令后跟“-P"参数,则表示要使用“PREs"
3)grep与egrep正则匹配文件,处理文件方法
a.grep与egrep的处理对象:文本文件
b.grep与egrep的处理过程:查找文本文件中是否含要查找的“关键字”(关键字可以是正则表达式),如果含有要查找的”关健字“,那么默认返回该文本文件中包含该”关健字“的该行的内容,并在标准输出中显示出来,除非使用了“>"重定向符号,
c.grep与egrep在处理文本文件时,是按行处理的
sed正则表达式特点
1)sed文本工具支持:BREs、EREs
sed指令默认是使用"BREs"
sed命令参数“-r”,则表示要使用“EREs"
2)sed功能与作用
a.sed处理的对象:文本文件
b.sed处理操作:对文本文件的内容进行---查找、替换、删除、增加等操作
c.sed在处理文本文件的时候,也是按行处理的
Awk(gawk)正则表达式特点
1)Awk文本工具支持:EREs
awk指令默认是使用“EREs"
2)Awk文本工具处理文本的特点
a.awk处理的对象:文本文件
b.awk处理操作:主要是对列进行操作
三、常见3中类型正则表达式比较
字符
说明
BasicRegEx
ExtendedRegEx
pythonRegEx
PerlregEx
转义
\
\
\
\
^
匹配行首,例如'^dog'匹配以字符串dog开头的行(注意:awk指令中,'^'则是匹配字符串的开始)
^
^
^
^
$
匹配行尾,例如:'^、dog$'匹配以字符串dog为结尾的行(注意:awk指令中,'$'则是匹配字符串的结尾)
$
$
$
$
^$
匹配空行
^$
^$
^$
^$
^string$
匹配行,例如:'^dog$'匹配只含一个字符串dog的行
^string$
^string$
^string$
^string$
\<
匹配单词,例如:'\
\<
\<
不支持
不支持(但可以使用\b来匹配单词,例如:'\bfrog')
\>
匹配单词,例如:'frog\>'(等价于'frog\b'),匹配以frog结尾的单词
\>
\>
不支持
不支持(但可以使用\b来匹配单词,例如:'frog\b')
\
匹配一个单词或者一个特定字符,例如:'\'(等价于'\bfrog\b')、'\'
\
\
不支持
不支持(但可以使用\b来匹配单词,例如:'\bfrog\b'
()
匹配表达式,例如:不支持'(frog)'
不支持(但可以使用\(\),如:\(dog\)
()
()
()
\(\)
匹配表达式,例如:不支持'(frog)'
\(\)
不支持(同())
不支持(同())
不支持(同())
?
匹配前面的子表达式0次或1次(等价于{0,1}),例如:where(is)?能匹配"where"以及"whereis"
不支持(同\?)
?
?
?
\?
匹配前面的子表达式0次或1次(等价于'\{0,1\}'),例如:'where\(is\)\?'能匹配"where"以及"whereis"
\?
不支持(同?)
不支持(同?)
不支持(同?)
?
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串"oooo",'o+?'将匹配单个"o",而'o+'将匹配所有'o'
不支持
不支持
不支持
不支持
.
匹配除换行符('\n')之外的任意单个字符(注意:awk指令中的句点能匹配换行符)
.
.(如果要匹配包括“\n”在内的任何一个字符,请使用:'(^$)|(.)
.
.(如果要匹配包括“\n”在内的任何一个字符,请使用:'[.\n]'
*
匹配前面的子表达式0次或多次(等价于{0,}),例如:zo*能匹配"z"以及"zoo"
*
*
*
*
\+
匹配前面的子表达式1次或多次(等价于'\{1,\}'),例如:'where\(is\)\+'能匹配"whereis"以及"whereisis"
\+
不支持(同+)
不支持(同+)
不支持(同+)
+
匹配前面的子表达式1次或多次(等价于{1,}),例如:zo+能匹配"zo"以及"zoo",但不能匹配"z"
不支持(同\+)
+
+
+
{n}
n必须是一个0或者正整数,匹配子表达式n次,例如:zo{2}能匹配
不支持(同\{n\})
{n}
{n}
{n}
{n,}
"zooz",但不能匹配"Bob"n必须是一个0或者正整数,匹配子表达式大于等于n次,例如:go{2,}
不支持(同\{n,\})
{n,}
{n,}
{n,}
{n,m}
能匹配"good",但不能匹配godm和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次,例如:o{1,3}将配"fooooood"中的前三个o(请注意在逗号和两个数之间不能有空格)
不支持(同\{n,m\})
{n,m}
{n,m}
{n,m}
x|y
匹配x或y,例如:不支持'z|(food)'能匹配"z"或"food";'(z|f)ood'则匹配"zood"或"food"
不支持(同x\|y)
x|y
x|y
x|y
[0-9]
匹配从0到9中的任意一个数字字符(注意:要写成递增)
[0-9]
[0-9]
[0-9]
[0-9]
[xyz]
字符集合,匹配所包含的任意一个字符,例如:'[abc]'可以匹配"lay"中的'a'(注意:如果元字符,例如:.*等,它们被放在[]中,那么它们将变成一个普通字符)
[xyz]
[xyz]
[xyz]
[xyz]
[^xyz]
负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:'[^abc]'可以匹配"Lay"中的'L'(注意:[^xyz]在awk指令中则是匹配未包含的任意一个字符+换行符)
[^xyz]
[^xyz]
[^xyz]
[^xyz]
[A-Za-z]
匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增)
[A-Za-z]
[A-Za-z]
[A-Za-z]
[A-Za-z]
[^A-Za-z]
匹配除了大写与小写字母之外的任意一个字符(注意:写成递增)
[^A-Za-z]
[^A-Za-z]
[^A-Za-z]
[^A-Za-z]
\d
匹配从0到9中的任意一个数字字符(等价于[0-9])
不支持
不支持
\d
\d
\D
匹配非数字字符(等价于[^0-9])
不支持
不支持
\D
\D
\S
匹配任何非空白字符(等价于[^\f\n\r\t\v])
不支持
不支持
\S
\S
\s
匹配任何空白字符,包括空格、制表符、换页符等等(等价于[\f\n\r\t\v])
不支持
不支持
\s
\s
\W
匹配任何非单词字符(等价于[^A-Za-z0-9_])
\W
\W
\W
\W
\w
匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_])
\w
\w
\w
\w
\B
匹配非单词边界,例如:'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'
\B
\B
\B
\B
\b
匹配一个单词边界,也就是指单词和空格间的位置,例如:'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'
\b
\b
\b
\b
\t
匹配一个横向制表符(等价于\x09和\cI)
不支持
不支持
\t
\t
\v
匹配一个垂直制表符(等价于\x0b和\cK)
不支持
不支持
\v
\v
\n
匹配一个换行符(等价于\x0a和\cJ)
不支持
不支持
\n
\n
\f
匹配一个换页符(等价于\x0c和\cL)
不支持
不支持
\f
\f
\r
匹配一个回车符(等价于\x0d和\cM)
不支持
不支持
\r
\r
\\
匹配转义字符本身"\"
\\
\\
\\
\\
\cx
匹配由x指明的控制字符,例如:\cM匹配一个Control-M或回车符,x的值必须为A-Z或a-z之一,否则,将c视为一个原义的'c'字符
不支持
不支持
\cx
\xn
匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长,例如:'\x41'匹配"A"。'\x041'则等价于'\x04'&"1"。正则表达式中可以使用ASCII编码
不支持
不支持
\xn
\num
匹配num,其中num是一个正整数。表示对所获取的匹配的引用
不支持
\num
\num
[:alnum:]
匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]]'
[:alnum:]
[:alnum:]
[:alnum:]
[:alnum:]
[:alpha:]
匹配任何一个字母([A-Za-z]),例如:'[[:alpha:]]'
[:alpha:]
[:alpha:]
[:alpha:]
[:alpha:]
[:digit:]
匹配任何一个数字([0-9]),例如:'[[:digit:]]'
[:digit:]
[:digit:]
[:digit:]
[:digit:]
[:lower:]
匹配任何一个小写字母([a-z]),例如:'[[:lower:]]'
[:lower:]
[:lower:]
[:lower:]
[:lower:]
[:upper:]
匹配任何一个大写字母([A-Z])
[:upper:]
[:upper:]
[:upper:]
[:upper:]
[:space:]
任何一个空白字符:支持制表符、空格,例如:'[[:space:]]'
[:space:]
[:space:]
[:space:]
[:space:]
[:blank:]
空格和制表符(横向和纵向),例如:'[[:blank:]]'ó'[\s\t\v]'
[:blank:]
[:blank:]
[:blank:]
[:blank:]
[:graph:]
任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]]'
[:graph:]
[:graph:]
[:graph:]
[:graph:]
[:print:]
任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符'\0'、EOF文件结束符(-1),但包括空格符号),例如:'[[:print:]]'
[:print:]
[:print:]
[:print:]
[:print:]
[:cntrl:]
任何一个控制字符(ASCII字符集中的前32个字符,即:用十进制表示为从0到31,例如:换行符、制表符等等),例如:'[[:cntrl:]]'
[:cntrl:]
[:cntrl:]
[:cntrl:]
[:cntrl:]
[:punct:]
任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集)
[:punct:]
[:punct:]
[:punct:]
[:punct:]
[:xdigit:]
任何一个十六进制数(即:0-9,a-f,A-F)
[:xdigit:]
[:xdigit:]
[:xdigit:]
[:xdigit:]
到此这篇关于grep中使用"\d"匹配数字不成功的原因解决的文章就介绍到这了,更多相关grep"\d"匹配数字内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!