1. 通过grep命令使用正则表达式:
当一个正则表达式完成之后,并能够保证这个表达式一定是准确的,需要不断地测试才可以确定其正确与否。在不同的环境下,用户需要不同的工具来帮助他完成测试的过程。如果是在Shell命令行中,用户可以使用grep
命令来测试。
grep家族有三大成员分别为:
grep:支持使用基本正则表达式。
egrep:支持使用扩展正则表达式。
fgrep:不支持使用正则表达式,即所有的正则表达式中的元字符都将作为一般字符,仅仅拥有其字面意义,不再拥有特殊意义。
grep命令的名称来自于全局搜索正则表达式并打印文本行它是一个非常古老的UNIX
命令,也是一种强大的文本搜索工具。
grep
命令使用正则表达式来搜索文本,并且把匹配的文本行打印出来。
grep命令根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;打印出符合条件的行,即文本搜索工具。注:PATTERN即过滤条件指由文本字符及正则表达式元字符所编写的字符串。
grep 命令的基本语法如下: grep [options] pattern [file…]
在上面的语法中,options表示选项,选项列表如下表。pattern表示要匹配的模式,file表示一系列的文 件名。grep命令会从一个或者多个文件中搜索满足指定模式的文本行,并且打印出来。模式后面的所有的字符串参数都被看作是文件名。
grep命令的选项:-n :显示行号-o :只显示匹配的内容-q : 静默模式,没有任何输出,得用 $? 来判断执行成功没有,即有没有过滤到想要的内容-l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常 -rl 一起用, grep -rl 'root'/etc-A : 如果匹配成功,则将匹配行及其后 n 行一起打印出来-B : 如果匹配成功,则将匹配行及其前 n 行一起打印出来-C : 如果匹配成功,则将匹配行及其前后 n 行一起打印出来--color : 高亮颜色显示匹配到的字符串-c : 如果匹配成功,则将匹配到的行数打印出来-E : 等于 egrep ,扩展-i :忽略大小写-v :取反,不匹配-w:匹配单词-r : 递归搜索,不仅搜索当前目录,还要搜索其各级子目录-s : 不显示关于不存在或者无法读取文件的错误信息
2. 基本正则表达式 :
基本正则表达式,又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX
规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式。
字符
|
含义
|
^
|
在每行的开始进行匹配
|
$
|
在每行的末尾进行匹配
|
. |
对任何单个字符进行匹配
|
*
|
对前一项进行
0
次或多次重复匹配
|
[str]
|
对
str
中的任何单个字符进行匹配
|
[^str]
|
对任何不在
str
中的单个字符进行匹配
|
[a-b]
|
对
a
到
b
之间的任何字符进行匹配
|
\
|
忽略后面一个字符的特殊含义
|
示例:
1)^word 表示搜索以word开头的内容。2)word$ 表示搜索以word结尾的内容。3)^$ 表示空行,不是空格。4). 代表且只能代表一个任意字符。5)\ 转义字符,让有着特殊身份意义的字符失效。例如:\.只表示小数点,还原原始的小数点的意义。6)* 重复0个或多个前面的字符7).* 匹配所有的字符。^.* 任意多个字符开头。8)[ ] 匹配字符集合内任意一个字符,如[a-z]9) [^abc] ^在中括号里表示非,不包含a或b或c10){n,m} 匹配n到m次,前一个字符。{n,} 至少N次,多了不限。{n} n次{,m} 至多m次,少了不限。注意:grep要将{}转义,\{\},egrep不需要转义12)\(\),定义子表达式的开始和结束位置。例如,正则表达式“\(love\).*\1”表示匹配2个“love”中间包含任意个字符的文本行,其中“\1”表示引用前面的“love”。13)\<或\b:锚定词首(支持vi和grep),其后面的任意字符必须作为单词首部出现,如 \<love或\blove14)\>或\b:锚定词尾(支持vi和grep),其前面的任意字符必须作为单词尾部出现,如 love\>或love\b
3. 正则表达式字符集 :
字符
|
说明
|
[[:alnum:]]
|
匹配任意一个字母或者数字,等价于
[A-Za-z0-9]
|
[[:alpha:]]
|
匹配任意一个字母,等价于
[A-Za-z]
|
[[:digit:]]
|
匹配任意一个数字,等价于
0-9
|
[[:lower:]]
|
匹配任意一个小写字母,等价于
a-z
|
[[:upper:]]
|
匹配任意一个大写字母,等价于
A-Z
|
[[:space:]]
|
匹配任意一个空白符,包括空格、制表符、换行符以及分页符
|
[[:blank:]]
|
匹配空格和制表符
|
[[:graph:]]
|
匹配任意一个看得见的可打印字符,不包括空白字符
|
[[:print:]]
|
匹配任何一个可以打印的字符,包括空白字符,但是不包括控制字符、字符串结束符‘\0’
、
EOF
文件结束符(
-1
)
|
[[:cntrl:]]
|
匹配任何一个控制字符,即
ASCII
字符集中的前
32
个字符。例如换行符、制表符等
|
[[:punct:]]
|
匹配任何一个标点符号,例如
“[]”
、
“
{}”或者
“,”
等
|
[[:xdigit:]]
|
匹配十六进制数字,即
0-9
、
a-f
以及
A-F
|
4. 扩展正则表达式:
扩展正则表达式,支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字符“^”
、
“$”
、
“.”
、
“*”
、“[]”以及
“[^]”
这
6
个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。
字符
|
含义
|
+
|
对前一项进行
1
次或多次重复匹配
|
?
|
对前一项进行
0
次或
1
次重复匹配
|
{ j }
|
对前一项进行
j
次重复匹配
|
{ j,}
|
对前一项进行
j
次或更多次重复匹配
|
{ ,k }
|
对前一项最多进行
k
次重复匹配
|
( s | t )
|
匹配
s
项或
t
项中的一项
|