正则、grep工具

简介:

正则表达式是用于字符串的模式分割、匹配、查找及替换等操作。模糊匹配

Linux正则表达式一般以为单位处理的。

通配符例子:ls *.log这里的*就是通配符(表示所有),不是正则表达式

 

三剑客以外的*是通配符


grep [-cinvABC] 'word' filename

 -c 行数

[root@lsxlinux02 ~]# grep "root" passwd  //grep自带颜色

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

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

[root@lsxlinux02 ~]# grep -c "root" passwd //-c 行数

2

 

 -i 不区分大小写

[root@lsxlinux02 ~]# grep -ni "root" passwd  //-i 不区分大小写

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

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

20:adsadadaROOT

21:adsadadaRooT

 

 

 -n 显示行号

[root@lsxlinux02 ~]# grep -n "root" passwd  //-n 显示行号

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

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

 

 -v 取反

[root@lsxlinux02 ~]# grep -nv "root" passwd  //-v 取反

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

6:sync:x:5:0:sync:/sbin:/bin/sync

 

 -r 遍历所有子目录

[root@lsxlinux02 ~]# grep -r "root" /etc/  //-r 遍历所有子目录

/etc/pki/ca-trust/extracted/README:root CA certificates.

/etc/pki/ca-trust/extracted/java/README:root CA certificates.

 

[root@lsxlinux02 ~]# grep -r "root" /etc/ > /tmp/grep.txt //当内容不好找时,可以定向到文件

[root@lsxlinux02 ~]# grep "passwd" /tmp/grep.txt

/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.  --after

[root@lsxlinux02 ~]# 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.--before

[root@lsxlinux02 ~]# 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

[root@lsxlinux02 ~]# 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


grep工具(中下)

grep实例

grep -n 'root' /etc/passwd //匹配root并打印行号

grep -nv 'nologin' /etc/passwd  //匹配不含有nologin,并打印行号

grep '[0-9]'/etc/inittab  //匹配【】里面的任何一个都满足

grep -v '[0-9]'/etc/inittab //匹配不含有【】里面的内容

grep -v '^#' /etc/inittab //匹配不以#开头的

grep -v '^#' /etc/inittab|grep -v  '^$' //匹配不以#开头,又不以$开头的

grep -n "[a-zA-Z]" passwd  //匹配含有字符集里任意一个

grep -n "[^a-zA-Z]" passwd  //匹配不含有字符集任意一个

grep -n "^[a-zA-Z]" passwd  //匹配以字母开头的

grep '^[^a-zA-Z]' test.txt  //匹配不以字符集内的内容开头

grep 'r.o' test.txt  // .点代表ro之间有任意一个字符过滤出来

grep 'oo*' test.txt  //*表示重复前面一个字符0次或者多次

grep '.*' test.txt  //匹配所有

grep 'o\{2\}' /etc/passwd  //重复至少2次,前面的字符。egrep可取消\

egrep 'o{2}' /etc/passwd

egrep "(oo){2}" passwd  //表示重复至少2次()里面的是组合

egrep 'o+' /etc/passwd  //+匹配一个或多个前面的字符

egrep 'oo?' /etc/passwd  //?匹配前面一个字符0次或者1次(有或者没有)

egrep 'root|nologin' /etc/passwd  //匹配含有root或者nologin

 

[root@localhost ~]# grep 'a*' grep01.txt  //*前面加一个字符是没有意义的

a

aa

aaa

dd




本文转自 虾米的春天 51CTO博客,原文链接:http://blog.51cto.com/lsxme/1983347,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 Shell Linux
|
存储 Linux Shell