首页 > 代码库 > 正则表达式:grep
正则表达式:grep
一、正则表达式简介
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串,我们可以达到的目的:给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);可以通过正则表达式,从字符串中获取我们想要的特定部分
二、grep简介
简介:grep(Global Regular Expression Print,全局正则表达式打印),一种文本过滤工具
作用:过滤出指定的行
注意:grep的过滤是以”行”为单位的
三、grep参数
-c 只输出匹配行的计数(即有多少行匹配)
-A 除了输出匹配行外还额外在后面显示多几行
-B 除输出匹配行外还额外在前面显示多几行
-C 除了输出匹配行外还额外在前后显示多几行
-v 显示不包含匹配文本的所有行
-r 过滤带有匹配字符的目录
-n 显示匹配字符所在的行的行数
-E 切换为 egrep
-q 只作为判断而不输出结果
--color 高亮显示匹配的字符
[root@root ~]# grep ‘root‘ /etc/passwd //过滤出带有root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@root ~]# grep -v ‘root‘ /etc/passwd //过滤出不带有root的行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
....
四、grep的规则表达式
^ :锚定行的开头如:‘^grep‘匹配所有以grep开头的行
$ :锚定行的结尾如:‘grep$‘匹配所有以grep结尾的行
^$ :代表空行,^代表行首,$代表行尾,^$意思就是行首之后就是行尾,中间什么也没有,所以代表空行
^.*$ :表示所有行
. :匹配任意一个字符,如‘r.p‘匹配r后接一个任意字符,然后是p
* :匹配零个或多个*号前面的字符如:‘a*b‘可以匹配b、cb、db、3b、$b(前面都是0个a)、ab(1个a)、aab(2个a)、aaaab、aaaaaaaaaab
.* :代表任意字符,如‘a.*b‘,则只要开头是a,结尾是b的字符串都可以匹配,中间多少个字符都可以
[ ] :匹配指定范围内的字符,如‘[Gg]rep‘匹配Grep和grep
^[ ] :以...开头的行,如^[a]表示以a开头的行
[^] :取反,如[^0-9]匹配不是数字的字符
^[^] :取非所在字符的行,如^[^0-9]匹配开头不是数字的行
扩展:grep 练习题
过滤出既有abc又有def的行:grep ‘abc‘ filename |grep ‘def‘
过滤出有abc或有def的行:grep ‘abc\|def‘ filename
过滤出以a或以b开头的行:grep -E ‘^a|^b‘ filename
过滤出以数字开头的行:grep ‘^[0-9]‘ filename
过滤出带有数字的行:grep ‘[0-9]‘ filename
过滤出带有root的行并输出行号:grep ‘root‘ filename -n
过滤出不带有root的行并输出行号:grep ‘root‘ filename -v -n
正则表达式:grep