什麼是正則
- 正則就是一串有規律的字符串
- 掌握好正則對於編寫shell腳本有很大幫助
- 各類編程語言中都有正則,原理是同樣的
grep命令
- grep [-cinvABC] 'word' filename #命令格式
- -c 行數
- -i 不區分大小寫
- -n 顯示行號
- -v 取反
- -r 遍歷全部子目錄
- -A 後面跟數字,過濾出符合要求的行以及下面n行
- -B 後面跟數字,過濾出符合要求的行以及上面n行
- -C 後面跟數字,同時過濾出符合要求的行以及上下各n行
[root@centos01 test_grep_dir]# 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
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@centos01 test_grep_dir]# grep -c 'nologin' passwd
15
[root@centos01 test_grep_dir]# 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:dbus:x:81:81:System message bus:/:/sbin/nologin
15:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
16:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
17:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@centos01 test_grep_dir]# grep -i '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
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@centos01 test_grep_dir]# grep -nvi '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
20:snowball:x:1000:1000::/home/snowball:/bin/bash
21:test01:x:1001:1001::/home/test01:/bin/bash
22:test02:x:1002:1002::/home/test02:/bin/bash
23:test03:x:1003:1004::/home/test03:/bin/bash
24:test06:x:1004:1005::/home/test06:/bin/bash
25:test07:x:1005:1006::/home/test07:/bin/bash
26:test08:x:1006:1007::/home/test08:/bin/bash
[root@centos01 test_grep_dir]# grep -r 'root' .
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./sub/sudoers:## the root user, without needing the root password.
./sub/sudoers:## Allow root to run any commands anywhere
./sub/sudoers:root ALL=(ALL) ALL
./sub/sudoers:## cdrom as root
[root@centos01 test_grep_dir]# 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
[root@centos01 test_grep_dir]# 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
[root@centos01 test_grep_dir]# 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
[root@centos01 test_grep_dir]# grep -n '[7-9]' passwd # 內容含有7或8或9的行
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:dbus:x:81:81:System message bus:/:/sbin/nologin
15:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
16:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
17:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
25:test07:x:1005:1006::/home/test07:/bin/bash
26:test08:x:1006:1007::/home/test08:/bin/bash
[root@centos01 test_grep_dir]# grep -nv '[7-9]' passwd # 內容不含有7或8或9的行
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
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
20:snowball:x:1000:1000::/home/snowball:/bin/bash
21:test01:x:1001:1001::/home/test01:/bin/bash
22:test02:x:1002:1002::/home/test02:/bin/bash
23:test03:x:1003:1004::/home/test03:/bin/bash
24:test06:x:1004:1005::/home/test06:/bin/bash
[root@centos01 test_grep_dir]# grep '^a' passwd # 以a開頭的行
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
[root@centos01 test_grep_dir]# grep 'r.o' passwd # .表示任意一個字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos01 test_grep_dir]# grep 'x:*11' passwd # *表示前面的字符零次或屢次匹配
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos01 test_grep_dir]# grep 'operator.*login' passwd # .* 任意個任意字符
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos01 test_grep_dir]# grep 'o\{2\}' passwd # {n1, n2}表示前面字符的重複n1到n2次
root:x:0:0:root:/root:/bin/bash
tooost
ooooost
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
[root@centos01 test_grep_dir]# grep 'o\{3,4\}' passwd # 重複3或4次o
tooost
ooooost
# egrep 不須要針對特殊字符進行轉義, 等價於grep -E
[root@centos01 test_grep_dir]# egrep 'o{2}' passwd
root:x:0:0:root:/root:/bin/bash
tooost
ooooost
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
[root@centos01 test_grep_dir]# egrep '(oo){2}' passwd # (oo) 把oo當作總體
ooooost
# + 表示1次或屢次前面的字符,與*的差別是*有0次
[root@centos01 test_grep_dir]# grep 'o\+o' passwd
root:x:0:0:root:/root:/bin/bash
tooost
ooooost
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
# ?表示0次或1次前面的字符
[root@centos01 test_grep_dir]# grep 'ro\?ot' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# |表示匹配多個字符串,只要有其中任意一個字符串知足條件便可
[root@centos01 test_grep_dir]# grep 'root\|operator' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin