概念:它使用单个字符串来描述或匹配一系列符合某个句法则规则的字符串; 正则表示式一般用来检索和替换那些符合某个模式的文本内容。 不管是查找某个文档,仍是查询某个日志文件并分析其内容,都会用正则表示式。 正则就是一串有规则的字符串; 掌握好正则对于编写shell脚本有很大帮助; 各类变成语言中都有正则,原理是同样的。 命令格式:grep [-cinvrABC] 'word' filename 经常使用选项以下: -c 表示打印符合要求的行数; -i 表示忽略大小写; -n 表示输出符合要求的行及其行号; -v 表示打印不符合要求的号; -r 遍历全部的子目录 -A 后面跟一个数字,例如-A2表示打印符合要求的行及下面的两行; -B 后面跟一个数字,例如-B2表示打印符合要求的行及上面的两行; -C 后面跟一个数字,例如-C2表示打印符合要求的行及上下各两行。 ^ 这个符号表示以什么什么开头。如:^# 以#开头; 或者[^#] 取反,除#号开头的行
[root@localhost /]# mkdir grep #建立一个grep目录
[root@localhost /]# cd /grep/ #进这个目录里面
[root@localhost grep]# cp /etc/passwd . #拷贝passwd到.(本目录下)
[root@localhost grep]# ls #查看目录下有什么文件
passwd正则表达式
过滤passwd文件里,nologin的字符shell
这里nologin过滤完后标红,是由于grep有一个--color=auto 添加颜色显示
能够查看下grep命令
[root@localhost grep]# which grep #which查看grep
alias grep='grep --color=auto'
/usr/bin/grepbash
[root@localhost grep]# grep -c 'nologin' passwd #-c符合’nologin'的行数
15ssh
grep显示这个文件包包含‘nologin'的行数。post
[root@localhost grep]# grep -n 'nologin' passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologinspa
grep不区分大小写显示出来 -ni.net
grep取反,除了nologin的显示出来 -v3d
遍历全部的子目录 -r日志
[root@localhost grep]# grep -r 'root' /etc/ (etc目录下全部包含root的文件列出来)
code
-A2把包含root的行,以及这行下面的两行都打印出来。
[root@localhost grep]# grep -nA2 'root' passwd
-B2把包含root的行,以及这行下面的两行都打印出来。
[root@localhost grep]# grep -nB2 'root' passwd
[root@localhost grep]# grep -nC2 'root' passwd
[root@localhost grep]# grep '[0-9]' passwd
[root@localhost grep]# grep -nv '[0-9]' /etc/inittab
[root@localhost grep]# grep -nv '^#' inittab
把不是以#开头的行,显示出来
过滤出任意一个字符和重复字符,示例以下:
[root@localhost grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
.表示任意一个字符,上例中,r.o表示r与o之间有一个任意字符的行过滤出来。
[root@localhost grep]# grep 'o{2}' passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
这里用到了符号{}表示内部为数字,表示前面的字符要重复的词数。
{}左右都须要加上转义字符\,另外使用{}还能够表示一个范围,具体格式为{n1,n2}
{}花括号表示前一个字符的范围,若是o{2},表示2个连续的oo显示出来。
[root@localhost grep]# egrep 'o+b' passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@localhost grep]# egrep 'o?1o' passwd
bin:x:1o:1:bin:/bin:/sbin/nologin
o1o
[root@localhost grep]# egrep 'root|nologin' passwd
. 表示任意一个字符 * 表示零个或者多个字符 {} 表示一个范围 + 表示一个或多个任意字符 ? 表示零个或多个任意字符 | 表示或者