7.3 9.1-9.3
正則是一串有規律的字符串,通常包含一些特殊符號;
grep/egrep egrep是grep的擴展,grep能實現的,egrep均能實現
grep查找文件中的關鍵字
[root@hyc-01-01 grep]# 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
…
[root@hyc-01-01 grep]# which grep
alias grep='grep --color=auto
/usr/bin/grep
-c 查看包含匹配項的行的總數
[root@hyc-01-01 grep]# grep -c 'nologin' passwd
15 共15行包含匹配項
-n 顯示包含匹配項的行的行號
[root@hyc-01-01 grep]# 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
…
-I 匹配時不區分大小寫
[root@hyc-01-01 grep]# grep -in '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
[root@hyc-01-01 grep]# grep -n 'nologin' passwd
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
不加-i參數,包含NOLOGIN的第2行不顯示
-v 將包含關鍵字nologin的行過濾掉
[root@hyc-01-01 grep]# grep -nv 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/NOLOGIN
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
-r 遍歷指定目錄中的所有文件,查找包含關鍵字的行並打印在屏幕上
[root@hyc-01-01 grep]# grep -r 'root' /etc/
在/etc目錄下的所有文件查找包含root關鍵字的行並打印在屏幕上
/etc/grub.d/00_header:datarootdir="/usr/share" 顯示匹配行內容並顯示該行所屬的文件
/etc/grub.d/00_header:export TEXTDOMAINDIR="${datarootdir}/locale"
/etc/grub.d/00_header:if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
/etc/grub.d/00_header: font="`make_system_path_relative_to_its_root "${font_path}"`"
…
-A 過濾出包含關鍵字的行及該行後的n行
[root@hyc-01-01 grep]# grep -A 2 'root' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
onologinperator: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
-B 過濾出包含關鍵字的行及該行以上n行
[root@hyc-01-01 grep]# grep -B 2 'root' passwd
root:x:0:0:root:/root:/bin/bash
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
-C 過濾出包含關鍵字的行及該行的上下n行
[root@hyc-01-01 grep]# grep -C 2 'root' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator: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
9.2 grep(中)
過濾出帶數字的行
[root@hyc-01-01 grep]# grep '[0-9]' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
daemon:x:2:2:daemon:/sbin:/sbin/nologin
…
過濾出不包含數字的行
[root@hyc-01-01 grep]# grep -v '[0-9]' passwd
過濾出以#開頭的行
[root@hyc-01-01 grep]# grep -n '^#' ./inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
9:# multi-user.target: analogous to runlevel 3 沒有第8行
…
過濾出不以#開頭的行
[root@hyc-01-01 grep]# grep -nv '^#' ./inittab
8:poiaejroigjpo
過濾掉以#開頭的行
[root@hyc-01-01 grep]# grep -v '^#' ./inittab
poiaejroigjpo
%^*^%%$&*^
匹配文件中非數字的項(此時非數字項均被標紅)
[root@hyc-01-01 grep]# grep '[^0-9]' ./inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two man targets:
poiaejroigjpo
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
…
過濾出以非數字開頭的行
[root@hyc-01-01 grep]# grep -n '^[^0-9]' inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:poiaejroigjpo
9:# multi-user.target: analogous to runlevel 3
…
^在[]中表示非(取反),在[]外表示開頭
9.3 grep(下)
. 表示任意一個字符
[root@hyc-01-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
dfjfjpwejraodroad
onologinperator:x:11:0:operator:/root:/sbin/nologin
[root@hyc-01-01 grep]# grep 'r.o' passwd
root:x:0:0:root:/root:/bin/bash
dfjfjpwejr.odro.d .也可以匹配到.
onologinperator:x:11:0:operator:/root:/sbin/nologin
* 表示將*左側的字符匹配0到n次
[root@hyc-01-01 grep]# grep 'o*o' passwd 匹配前面匹配任意個o,結尾有一個o
root:x:0:0:root:/root:/bin/bash
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
bot 只有單個o
boot o左側有一個o
boot
booooot
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
.* 匹配任意的任意個字符(包括空行)
[root@hyc-01-01 grep]# grep '.*' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
bot
boot
booot
booooot
sync:x:5:0:sync:/sbin:/bin/sync
…
[root@hyc-01-01 grep]# grep 'bin.*NOLOGIN' passwd 匹配bin後跟任意個任意字符後接NOLOGIN的項
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
o\{n\} 匹配出現重復n次的字母o
[root@hyc-01-01 grep]# grep 'o\{2\}' passwd 匹配字母o出現2次的項(需要\脫義)
root:x:0:0:root:/root:/bin/bash
rooooooooooot
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
boot
booot
booooot
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
…
匹配一個0-n個特定字符
[root@hyc-01-01 grep]# grep 'o\{0,3\}' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLOGIN
dfjfjpwejr.odro.d
daemon:x:2:2:daemon:/sbin:/sbin/nologin
rooooooooooot
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
bot
boot
booot
booooot
…
[root@hyc-01-01 grep]# grep -E 'o{2}' passwd grep跟-E參數不需要脫義符號
root:x:0:0:root:/root:/bin/bash
rooooooooooot
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
boot
booot
booooot
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
…
[root@hyc-01-01 grep]# egrep 'o{2}' passwd 使用egrep時不需要脫義符號
root:x:0:0:root:/root:/bin/bash
rooooooooooot
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
boot
booot
booooot
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
onologinperator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@hyc-01-01 grep]# grep -E '(oo){2}' passwd 匹配2次兩個o
rooooooooooot
adm:x:3:4:adm:/var/adm:/soooobin/nologin
boooot
sync:x:5:0:sync:/sbin:/bin/syncoooo
[root@hyc-01-01 grep]# grep 'o\+o' passwd 匹配+左側的字符一次或多次
root:x:0:0:root:/root:/bin/bash
rooooooooooot
adm:x:3:4:adm:/var/adm:/soooobin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
boot
booot
boooot
…
[root@hyc-01-01 grep]# egrep '(oo)?t' passwd 篩選字符串oo後跟一個t的重復次數為0或1次的
root:x:0:0:root:/root:/bin/bash
rooooooooooot
bot
boot
booot
boooot
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
…
[root@hyc-01-01 grep]# egrep 'o?t' passwd 篩選字符o重復次數為0或1次且後跟一個t的
root:x:0:0:root:/root:/bin/bash
rooooooooooot
bot
boot
booot
boooot
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
…
[root@hyc-01-01 grep]# grep -E 'root|nologin' passwd 匹配root或nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/soooobin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7.3 9.1-9.3