正则介绍

什么是正则

* 正则就是一串有规律的字符串
* 掌握好正则对于编写shell脚本有很大帮助
* 各种编程语言中都有正则,原理都是一样的

grep

grep;过滤所有含有nologin的字符串(在Centos7中过滤的字符会标红)

[root@Ask-02 演示]# grep 'nologin' passwd

-c;查看有多少行

[root@Ask-02 演示]# grep -c 'nologin' passwd 38

-n;显示行号

[root@Ask-02 演示]# 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-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin 15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16:dbus:x:81:81:System message bus:/:/sbin/nologin 17:polkitd:x:998:996:User for polkitd:/:/sbin/nologin

-i;不区分大小写(好比你修改了内容中其中一个nologin的首字母为大写的N,它也会列出来,如果不加i则不列出来)

[root@Ask-02 演示]# grep -ni 'nologin' passwd

-v;取反,把内容中含有nologin的信息去掉只显示剩余的信息

[root@Ask-02 演示]# grep -vni '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 43:ask:x:1000:1000:Ask:/home/ask:/bin/bash

-r;遍历所有子目录查找含有指定相关信息的文件

[root@Ask-02 演示]# grep -r 'root' /etc/

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

[root@Ask-02 演示]# grep -A2 'root' passwd

-B;后面跟数字,过滤出符合要求的行以及以上的n行

[root@Ask-02 演示]# grep -nB2 'root' passwd

-C;后面跟数字,过滤出符合要求的行已经上下的各n行

[root@Ask-02 演示]# grep -nC2 'root' passwd

grep正则形式用法

[0-9];去方括号内的任意数显示

[root@Ask-02 演示]# grep '[0-9]' passwd

-v;显示出了指定内容外的内容 -v '^#';表示显示不以井号为开头的一行

[root@Ask-02 演示]# grep -nv '^#' inittab 12:akjsdlakjsdh

'^[^0-9]';表示过滤掉含有0-9数字开头的行,只显示没有以数字开头的行 相反查看已数字开头的行

[root@Ask-02 演示]# grep -nv '^[^0-9]' inittab 3:111122222 21:11111asd2222222

'r.o';点表示任意字符 'o*o';星号表示星号前字符和后面的o字符的行 'o{2}';表示列出含有连续两次o的行花括号里的数字是次数的意思 如果不想要使用脱义符号的可以使用egrep命令,或者使用**-E**参数

[root@Ask-02 演示]# grep -E 'o{2}' passwd [root@Ask-02 演示]# egrep 'o{2}' passwd

'o+o';表示一个或多个加号前面的字符 'o?t';表示列出问号前的字符依次的行信息 'root|nologin';这里的竖线表示或者的意思列出含有竖线两边任意一个字符信息的行