正则grep

Posted xiaobo-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则grep相关的知识,希望对你有一定的参考价值。

 

什么是正则:

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

 

 

 

正则三剑客:

grep/egrep (egrep是grep的扩展),sed, awk

 

 

 

grep

grep过滤指定关键词

[[email protected] grep]# grep ‘nologin‘ passwd 

 

-c 行数

[[email protected] grep]# grep -c ‘nologin‘ passwd 

15

 

-i 不区分大小写

[[email protected] grep]# grep -i ‘nologin‘ passwd 

 

-n 显示行号

[[email protected] grep]# grep -n ‘nologin‘ passwd 

 

-v 取反

把除了nologin外的所有

[[email protected] grep]# grep -vin ‘nologin‘ passwd 

 

-r遍历子目录和孙目录

[[email protected] grep]# grep -r ‘root‘ /etc/

 

可以把过滤到的字符串重定向到文件中,然后从文件中查找相应的字符串

[[email protected] grep]# grep -r ‘root‘ /etc/  > /tmp/grep.log

[[email protected] 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 practical.

 

 

-A 后面跟数字,过滤出符合要求的行以及下面n行

例如当前符合要求的行,以及下面的n行

[[email protected] grep]# grep  -nA2 ‘root‘ passwd 

1:root:x:0:0:root:/root:/bin/bash

2-bin:x:1:1:bin:/bin:/sbin/NOLOGIN

3-daemon:x:2:2:daemon:/sbin:/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

 

 

 

-B 也是一样,后面跟数字,列出符合要求的当前行,以及行上面的n行

[[email protected] grep]# grep -nB2 ‘root‘ passwd 

1:root:x:0:0:root:/root:/bin/bash

--

8-halt:x:7:0:halt:/sbin:/sbin/halt

9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10:operator:x:11:0:operator:/root:/sbin/nologin

 

 

-C 也是一样,后面跟数字,列出符合要求的当前行,以及行上面n行和行后面n

[[email protected] grep]# grep -nC2 ‘root‘ passwd 

1:root:x:0:0:root:/root:/bin/bash

2-bin:x:1:1:bin:/bin:/sbin/NOLOGIN

3-daemon:x:2:2:daemon:/sbin:/sbin/nologin

--

8-halt:x:7:0:halt:/sbin:/sbin/halt

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

 

 

 

 

显示文件中的数字(红色高亮显示数字)

[[email protected] grep]# grep ‘[0-9]‘ passwd 

 

 

 

不显示文件中带有数字的字符

grep -v ‘[0-9]‘ passwd

 

-n是显示行数,-v取反,意思是不显示数字的,并且显示行数。

[[email protected] grep]# grep  -vn  ‘[0-9]‘ /etc/inittab

 

 

 

以井号开头的行:

‘^#‘

显示以井号开头的行

[[email protected] grep]# grep -n ‘^#‘ inittab 

 

显示不以井号开头的行:

grep  -nv   ‘^#‘ inittab

[[email protected] grep]# grep -nv ‘^#‘ inittab 

9:jhsdjhsajdhjashdj

 

 

 

显示非数字的字符:非数字字符高亮

[[email protected] grep]# grep ‘[^0-9]‘ inittab 

 

 

显示非数字开头的行:

[[email protected] grep]# grep ‘^[^0-9]‘ inittab 

 

 

 

^ 放到[]方括号里面意思是取反,^放到开头意思是以什么字符开头。

 

 

 

 

 

 

 

 

 

grep ‘r.o‘ 表示  . 点表示任意一个字符

 

[[email protected] grep]# grep ‘r.o‘ passwd 

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

 

 

 

grep ‘o*o’        * 号 表示o o中间n个字符

[[email protected] grep]# grep  ‘o*o‘ passwd 

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

 

 

 

grep   ‘.*‘ 会匹配所有字符。    .表示任意一个字符,*表示所有字符

 

 

[[email protected] grep]# grep  ‘xiaobo.*‘ passwd 

xiaobo:x:1000:1000::/home/xiaobo:/bin/bash

 

 

 

grep  ‘o\{2\}‘  passwd;   \表示脱义;

‘o\{2\}’表示o出现两次。

 

[[email protected] 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

 

 

 

 

 

‘o\{0,3\}‘ 从0到3都匹配,就是说o出现0次、1次、2次、3次;

[[email protected] grep]# grep ‘o\{0,3\}‘ passwd 

 

 

 

去掉脱义符,用egrep ‘o{2}‘ passwd 表示o出现两次

[[email protected] 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/nologin

 

 

 

 

 

也可以用 grep  -E  ‘o{2}‘ passwd

[[email protected] 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/nologin

 

 

 

grep  -E ‘(oo){2}‘  passwd 表示出现4个o

[[email protected] grep]# grep  -E ‘o{4}‘ passwd 

ooooqq

osdaoooo

 

 

 

grep    ‘o\+o‘ passwd    +加号 表示1个或者多个o

[[email protected] grep]# grep ‘o\+o‘ 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

ooooqq

osdaoooo

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

 

 

不脱义,用egrep

egrep  ‘o+o‘ passwd

 

epgrep  ‘o+t‘  passwd

[[email protected] grep]# egrep ‘o+t‘ passwd 

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

 

 

 

egrep ‘o?t‘  passwd           ?问号表示0或1个 问号前面的字符

[[email protected] grep]# egrep ‘o?1o‘ passwd 

postfix:x:89:89::/var/spool/postfix:/sbin/n1ogin

cho1orony:x:998:996::/var/lib/chrony:/sbin/nologin

 

 

 

grep -E   ‘root|nologin‘ passwd  匹配root或者nologin字符

[[email protected] grep]# grep -E ‘root|nologin‘ passwd 

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

 

 

不区分大小写 -i

grep -Ei   ‘root|nologin‘ passwd  匹配root或者nologin字符

 

  

  

以上是关于正则grep的主要内容,如果未能解决你的问题,请参考以下文章

二十正则介绍grep上grep中grep下

正则 :grep 工具的正则表达式

正则和grep——再做正则就去死

关于grep后跟多个正则查询条件的问题

正则表达式与grep

Linux基础--grep与正则表达式