什麼是正則shell
* 正則就是一串有規律的字符串 * 掌握好正則對於編寫shell腳本有很大幫助 * 各類編程語言中都有正則,原理都是同樣的
grep;過濾全部含有nologin的字符串(在Centos7中過濾的字符會標紅)編程
[root@Ask-02 演示]# grep 'nologin' passwdbash
-c;查看有多少行編程語言
[root@Ask-02 演示]# grep -c 'nologin' passwd
38ide
-n;顯示行號3d
[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/nologincode
-i;不區分大小寫(比如你修改了內容中其中一個nologin的首字母爲大寫的N,它也會列出來,若是不加i則不列出來)blog
[root@Ask-02 演示]# grep -ni 'nologin' passwd 字符串
-v;取反,把內容中含有nologin的信息去掉只顯示剩餘的信息it
[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
[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';點表示任意字符
*'oo';星號表示星號前字符和後面的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';這裏的豎線表示或者的意思列出含有豎線兩邊任意一個字符信息的行