正则grep介绍

正则介绍:

解释对“正则表达式”的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其他工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。许多程序设计语言也都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,还是查询某个日志文件并分析其内容,都会用正则表达式。其实正则表达式只是一种思想、一种表示方法。只要我们使用的工具支持这种表示方法,那么这个工具就可以处理正则表达式的字符串。常用的工具有grep、sed、awk等,其中grep、sed和awk都是针对文本的行进行操作的。

  • 正则就是一串有规律的字符串

  • 掌握好正则对于编写shell脚本有很大帮助

  • 各种编程语言中都有正则,原理是一样的

grep工具的使用

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep命令 主要作用:过滤指定关键词
命令格式为:grep [-cinvABC] ‘word’ filename
常用选项含义表示如下:
grep -c:表示打印符合要求的行数。
grep -i:表示忽略大小写。
grep -n:表示输出符合要求的行及其行号。
grep -v:表示打印不符合要求的行,取反。
grep -r:遍历所有子目录
grep -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面的两行。
grep -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行。
grep -C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。
grep -w:匹配一个完整的单词
grep -E:特殊符号脱意==egrep
grep    跟特殊符号的话,要用单引号
grep --include 包含
grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据
实验验证操作:

验证准备,把passwd文件做为样本文件

[root@aminglinux-01 ~]# mkdir grep 
[root@aminglinux-01 ~]# cd grep/
[root@aminglinux-01 grep]# cp /etc/passwd .
[root@aminglinux-01 grep]# pwd
/root/grep
[root@aminglinux-01 grep]# ls
passwd

过滤出包含nologin字符的行

[root@ataolinux-01 grep]# grep 'nologin' passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
user4:x:1006:1005::/home/aming111:/sbin/nologin

#centos7中grep命令自带加了--color显示颜色
[root@ataolinux-01 grep]# which grep
alias grep='grep --color=auto'
	/usr/bin/grep

grep -c 打印带有关键词的总行数

[root@aminglinux-01 grep]# grep -c 'nologin' passwd  
17

grep -n 过滤出带有某个关键词的行,并输出行号,前面的数字显示为绿色,表示行号。

[root@aminglinux-01 grep]# grep -n 'root' passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

grep -v 取反,过滤出不包含nologin的行,因为加了-n并打印出行号

[root@aminglinux-01 grep]# grep -nv 'nologin' passwd 
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
22:aming:x:1000:1005::/home/aming:/bin/bash
23:user1:x:1001:1001::/home/user1:/bin/bash
24:aminglinux:x:1002:1002::/home/aminglinux:/bin/bash
25:user2:x:1003:1003::/home/user2:/bin/bash
26:user3:x:1004:1005::/home/user3:/bin/bash
28:user5:x:1007:1007::/home/user5:/bin/bash
29:user6:x:1008:1010::/home/user6:/bin/bash

grep –i 不区分大小写

#编辑文件把第二行no改成大写NO
[root@aminglinux-01 grep]# vim passwd 

#不显示出大写的第二行
[root@aminglinux-01 grep]# grep -n 'nologin' passwd 
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

#加-i   不区分大小写,把大写行列出
[root@aminglinux-01 grep]# grep -ni '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

grep -r 打印显示etc下的所有子目录

[root@aminglinux-01 grep]# grep -r 'root' /etc/ 
/etc/pki/ca-trust/ca-legacy.conf:# The upstream Mozilla.org project tests all changes to the root CA
/etc/pki/ca-trust/ca-legacy.conf:# to temporarily keep certain (legacy) root CA certificates trusted,
/etc/pki/ca-trust/ca-legacy.conf:#   It may keep root CA certificate as trusted, which the upstream 
/etc/pki/ca-trust/extracted/README:root CA certificates.
/etc/pki/ca-trust/extracted/java/README:root CA certificates.
....省略

#找下/etc/passwd文件,如果觉得难找,可以把文件重定向到一个文件里去
[root@xietaolinux3 grep]# grep -r 'root' /etc/ > /tmp/grep.log

#再使用grep命令查找
[root@xietaolinux3 grep]# grep passwd /tmp/grep.log 
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
/etc/postfix/main.cf:# the system passwd file in the chroot jail is just not pra

grep –A2 打印包含halt的行以及这行下面的两行都打印出来

[root@aminglinux-01 grep]# grep -A2 'halt' passwd 
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

grep -B2 打印包含halt的行以及这行上面的两行都打印出来

[root@aminglinux-01 grep]# grep -B2 'halt' passwd 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

grep -C2 打印包含halt的行以及这行上下各两行都打印出来

[root@aminglinux-01 grep]# grep -C2 'halt' passwd 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
grep实验示例扩展
grep '[0-9]'/etc/inittab
grep -v '[0-9]'/etc/inittab
grep -v '^#' /etc/inittab
grep -v '^#' /etc/inittab|grep -v  '^$'
grep '^[^a-zA-Z]' test.txt
grep 'r.o' test.txt
grep 'oo*' test.txt
grep '.*' test.txt
grep 'o\{2\}' /etc/passwd

grep '[0-9]' 过滤出所有包含范围0-9数字的行(只要有一个数字就算匹配到)

#实验需要把这个文件拷贝到grep目录下
[root@aminglinux-01 grep]# cp /etc/inittab .  
[root@aminglinux-01 grep]# ls
inittab  passwd

[root@aminglinux-01 grep]# grep '[0-9]' /etc/inittab 
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

grep -v '[0-9]' 过滤出所有不包含数字的行(只要是包含一个数字,就不显示)

[root@aminglinux-01 grep]# grep -v '[0-9]' /etc/inittab 
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#

grep -v '^#' 过滤掉所有以#开头的行,这里面含有空行。

#编辑这个文件随意加上几行字符,注意:系统目录下这个文件是不能随意更改的,不能系统可以会无法启动。
[root@aminglinux-01 grep]# vim inittab 

#把不以#号开头的号打印出来
[root@aminglinux-01 grep]# grep -v '^#' inittab 
%^&$$%%##$%%%%
djffafdfafd
773834442345

$$%%HFHFHf121

767dfadfdf

过滤掉所有空行和以#开头的行

[root@aminglinux-01 grep]# grep -v '^#' inittab |grep -v  '^$'  
%^&$$%%##$%%%%
djffafdfafd
773834442345
$$%%HFHFHf121
767dfadfdf

grep '[^0-9]' 非0-9数字以外的字符全部变红

[root@xietaolinux3 grep]# grep '[^0-9]' inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
11111111a222222
&&&&&&&&&&&
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#

#匹配一个非方括号里的数字开头的字符显示红色并打印出来
[root@xietaolinux3 grep]# grep -n '^[^0-9]' inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
11:#
12:# To view current default target, run:
14:&&&&&&&&&&&
15:# systemctl get-default
16:#
17:# To set a default target, run:
18:# systemctl set-default TARGET.target
19:#

#加-v取反,打印出以数字开头的行
[root@xietaolinux3 grep]# grep -vn '^[^0-9]' inittab
13:11111111a222222

总结^符号:如果把^放到方括号里面来,它就意义这方括号里面字符的反义,非的意思,如果放到方括号外面,是以什么什么开头的

解释:

[^] 匹配非方括号里面的内容。就是只要不是方括号里面的内容都打印出来。

^[^] 匹配非方括号里面的内容开头的所有字符。 只要不是方括号里面的内容所开头的,都打印出来。

或者

例如 [^0-9] 那就是非数字(包括字母+特殊符号)

例如[^a-zA-Z] 那就是非字母(包括数字+特殊符号)

例如[^0-9a-zA-Z]那就是非数字字母(特殊符号)

扩展知识

在正则表达式中,^ 表达行的开始,$表示行的结尾那么空行则可以用^$表示。那如何打印出不以英文字开头的行呢?如下所示:

我们先来自定义一个文件

[root@aminglinux-01 ~]# mkdir /tmp/1
[root@aminglinux-01 ~]# cd /tmp/1
#在test中写几行字符串用来做实验
[root@aminglinux-01 1]# vim test.txt  
[root@aminglinux-01 1]# cat test.txt 
123
abc
456

abc2323
#fjdkfaf
A423423423

实验如下

[root@aminglinux-01 1]# grep '^[^a-zA-Z]' test.txt 
123
456
#fjdkfaf
[root@aminglinux-01 1]# grep '[^a-zA-Z]' test.txt 
123
456
abc2323
#fjdkfaf
A423423423

备注:如果是数字就用[0-9]这样的形式(当遇到类似[15]的形式时,表示只含有1或者5)。如果要过滤数字以及大小写字母,则要写成类似[0-9a-zA-Z]的形式。另外,[^字符]表示除[]内字符之外的字符。请注意,把^写到方括号里面和外面是有区别的。

总结正则里面的特殊符号

. 表示 任意一个字符
* 表示 零个或多个*前面的字符
.* 表示零个或多个任意字符,空行也包含在内;以r开头o结尾。
? 表示0个或者1个前面的字符,使用的时候要\ 脱意一下
+ 表示一个或者多个+前面的字符
| 在正则表达式里面表示或者,可以写多个,是特殊符号,要使用脱意 或者-E 或者 egrep
() 括号表示一个整体
{1,3}大括号表示一个范围 
? +(){} |都是特殊符号,要使用必须脱意或者-E 或者egrep

grep 'r.o' passwd 过滤出范围内任意一个字符和重复字符

[root@xietaolinux3 grep]# grep 'r.o' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@xietaolinux3 grep]# vim passwd 
[root@xietaolinux3 grep]# grep 'r.o' passwd 
root:x:0:0:root:/root:/bin/bash
adgadgag:13234314:dgadgsfg:rao:222
222222222:r>o:gadg
operator:x:11:0:operator:/root:/sbin/nologin

. 表示任意一个字符,上例中r.o表示把r与o之前有一个任意字符的行过滤出来。

grep 'o*o' passwd

*表示左边这个字符重复0到N次,N表示一个随意的数字,0次也行,1次也行,2次也行。o*表示oo、ooo、oooo...或者更多的o。
[root@xietaolinux3 grep]# grep 'o*o' passwd 
root:x:0:0:root:/root:/bin/bash
adgadgag:13234314:dgadgsfg:rao:222
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
222222222:r>o:gadg
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/noologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

[root@aminglinux-01 grep]# grep 'ooo*' 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

grep '.*' passwd

#.*表示零个或多个任意字符,空行也包含在内,它会把passwd文件里面的所有行都匹配到。
[root@xietaolinux3 grep]# grep '.*' passwd 
root:x:0:0:root:/root:/bin/bash
adgadgag:13234314:dgadgsfg:rao:222
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
222222222:r>o:gadg
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/noologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

#加管道计算匹配的行数总和
[root@aminglinux-01 grep]# grep '.*' passwd |wc -l
29
[root@aminglinux-01 grep]# wc -l passwd 
29 passwd

#如果想匹配某行
[root@xietaolinux3 grep]# grep 'mysql.*bash' passwd 
mysql:x:1000:1000::/hooome/mysql:/bin/bash

grep '0{2}' 指定要过滤出的字符出现次数

#直接写花括号是没有意义的,就是表示花括号
[root@xietaolinux3 grep]# grep '{2}' passwd

#o表示出现两次,加脱义\
[root@xietaolinux3 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/noologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

#取一个2到2的范围
[root@xietaolinux3 grep]# grep 'o\{2,3\}' 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/noologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin


#不带\符号,可以使用egrep
[root@xietaolinux3 grep]# egrep '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/noologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

#grep使用-E也是一样效果
[root@xietaolinux3 grep]# grep -E '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/noologin
mysql:x:1000:1000::/hooome/mysql:/bin/bash
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

#表示出现两次oo
[root@xietaolinux3 grep]# grep -E '(oo){2}' passwd 
nginx:x:996:994:nginx user:/var/cachooooe/nginx:/sbin/nologin

这里用到了符号{},其内部为数字,表示前面的字符要重复的次数。需要强调的是,{}左右都需要加上转义字符\。另外,在正则当中,花括号是用来表示一个范围,具体格式为{n1,n2},其中n1<n2,表示重复n1到n2次数前面的字符,n2还可以为空,这时表示大于等于n1次。

egrep工具的使用

egrep工具是grep工具的扩展版本,可以完成grep不能完成的工作,egrep命令用于在文件内查找指定的字符串。egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。

egrep 'o{2}' /etc/passwd
egrep 'o+' /etc/passwd
egrep 'oo?' /etc/passwd
egrep 'root|nologin' /etc/passwd
egrep '(oo){2}' /etc/passwd

下面用实验来验证下egrep这个工具的几个用法,操作如下

为了实验方便,编辑test.txt文件为以下内容

rot:x:o:o:/rot:/bin/bash
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

和grep不同,这里egrep使用的是符号+,它表示匹配1个或多个+前面的字符,这个“+”是不支持审美观点grep直接使用的,包括上面{},也是可以直接被egrep使用,而不用加\转义

过滤出一个或多个指定的字符

[root@aminglinux-01 grep]# vim test.txt
[root@aminglinux-01 grep]# egrep 'o+' test.txt 
rot:x:o:o:/rot:/bin/bash
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

[root@aminglinux-01 grep]# egrep 'oo+' test.txt 
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

[root@aminglinux-01 grep]# egrep 'ooo+' test.txt 
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

[root@xietaolinux3 grep]# egrep 'o+o' test.txt 
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

[root@xietaolinux3 grep]# egrep 'o+t' test.txt 
rot:x:o:o:/rot:/bin/bash
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

过滤出零个或一个?前面的指定字符

?表示?前面这个字符的重复次数
[root@aminglinux-01 grep]# egrep 'o?' test.txt 
rot:x:o:o:/rot:/bin/bash
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[root@aminglinux-01 grep]# egrep 'ooo?' test.txt 
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash
[root@aminglinux-01 grep]# egrep 'oooo?' test.txt 
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

过滤出字符串1或者字符串2

[root@aminglinux-01 grep]# egrep 'aaa|111|ooo' test.txt 
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

egrep中()的应用

[root@aminglinux-01 grep]# egrep 'r(oo|at)o' test.txt 
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

这里用()表示一个整体,上例中会把包含rooo或者rato的行过滤出来,另外也可以把()和其他符号组合在一起,例如(oo)+表示1个或者多个oo,如下所示

[root@aminglinux-01 grep]# egrep '(oo)+' test.txt 
operator:x:11:o:operator:/root:/sbin/nologin
operator:x:11:o:operator:/rooot:/sbin/nologin
roooot:x:o:o:/roooooot:/bin/bash

转载于:https://my.oschina.net/u/3708153/blog/2991247

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值