1. 程式人生 > 實用技巧 >Linux命令之三劍客

Linux命令之三劍客

三劍客在Linux中功能強大,下面所說的是Linux中最重要的三個命令在業界被稱為“三劍客”,它們分別是awk,sed,grep。三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表示式作為基礎,而在Linux系統中,支援兩種正則表示式,分別為“標準正則表示式”和“擴充套件正則表示式”。在這裡將介紹三劍客命令的用法。

我們知道Linux下一切皆檔案,對Linux的操作就是對檔案的處理,三劍客命令可以幫助我們更好的處理檔案。
三劍客的功能非常強大,但我們只需要掌握他們分別擅長的領域即可:grep擅長查詢功能,sed擅長取行和替換。awk擅長取列。

因為涉及到正則表示式,所以我們首先介紹元字元,便於大家更好地理解使用。

元字元 功能 意思
^ 匹配行首 表示以某個字元開頭
$ 匹配行尾 表示以某個字元結尾
^$ 空行的意思 表示空行的意思
. 匹配任意單個字元 表示任意一個字元
***** 字元* 匹配0或多個此字元 表示重複的任意多個字元
** 遮蔽一個元字元的特殊含義 表示去掉有意義的元字元的含義
[] 匹配中括號內的字元 表示過濾括號內的字元
.* 代表任意多個字元 就是代表任意多個字元
lele{n} 用來匹配前面lele出現次數。n為次數 就是統計前面lele出現的次數
lele{n,}
含義同上,但次數最少為n 從功能就可以看出
lele{n,m} 義同上,但lele出現次數在n與m之間 從功能也可以看出
lele{n,m} 義同上,但lele出現次數在n與m之間 從功能也可以看出

awk #三劍客之老大,擅長取列。

#取列,計算,統計,陣列,迴圈,判斷
	-F    #指定分割符,預設是以空白字元為分隔符
	NR	#表示行號
	NF	#表示每一行的列數
	$NF	#表示最後一列
	$0	#整行內容
	$n	#n是數字   表示取出哪一列
    &&	#並且 
    ||	#或者
    !	#排除
    ’	#取出連續的
    ;	#多條命令分割

#取行
[root@lxy ~]# awk  'NR==1'  passwd 		#取出第一行
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# awk  'NR==1,NR==3'  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@lxy ~]# awk  'NR==1;NR==3' passwd 		#取出第一行和第三行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@lxy ~]# awk  'NR>10'  passwd 		#取出大於10行的所有行的的內容
root
[root@lxy ~]# awk 'NR<2'  passwd 		#取出小於兩行的內容
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# awk 'NR<=2'  passwd 		#小於等於
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lxy ~]# awk 'NR>=10'  passwd 		#大於等於
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@lxy ~]# awk 'NR>=1 && NR<=10'  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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@lxy ~]# awk 'NR>0 && NR<11'  passwd		#取出大於等於第一行並且小於等於第十行    &&  並且


[root@lxy ~]# awk  'NR<2 || NR>10'  passwd 		#取出小於2行或者大於10行   ||  或者
root:x:0:0:root:/root:/bin/bash
root

[root@lxy ~]# awk  '{print NR,$0}'  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
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
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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 root


[root@lxy ~]# awk  '/root/'  passwd 		#過濾出root的字串
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@lxy ~]# awk  '/^root/'  passwd 		#過濾出以root開頭的字串
root:x:0:0:root:/root:/bin/bash
root
[root@lxy ~]# awk  '/root$/'  passwd 		#過濾出以root為結尾的字串
root
[root@lxy ~]# awk  '/root|adm/'  passwd 	#過濾出root或者adm的字串
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@lxy ~]# awk  '/root/;/adm/'  passwd 	#過濾出root或者adm的字串
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root

[root@lxy ~]# awk  '/adm/,/sync/'  passwd 	#過濾以adm的行到sync的行
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

[root@lxy ~]# awk   'BEGIN{FS=":"}{print $7}'  passwd 		#取出檔案的第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@lxy ~]# awk  -F:  '{print $7}'  passwd 	#取出檔案的第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@lxy ~]# awk  -F '[:]'  '{print $7}'  passwd 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@lxy ~]# awk  -F:  '{print $NF}'  passwd 		#取出檔案中的每一行的最後一列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
root

[root@lxy ~]# echo  'oldboy:123 oldgirl'  >>passwd 
[root@lxy ~]# awk  '{print $2}'  passwd  |tail -1
oldgirl
[root@lxy ~]# awk -F: '{print $2}'  passwd  |tail -1
123 oldgirl
[root@lxy ~]# awk -F '[: ]' '{print $2}'  passwd  |tail -1		#支援多個分隔符  
123

#取出ip地址
[root@lxy ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::c653:602a:38c6:e45  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:0b:8a  txqueuelen 1000  (Ethernet)
        RX packets 3515748  bytes 5009905896 (4.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 382062  bytes 54939915 (52.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@lxy ~]# ifconfig  eth0 |awk  'NR==2'  
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@lxy ~]# ifconfig  eth0 |awk  'NR==2'   |awk  '{print $2}'
10.0.0.100
[root@lxy ~]# ifconfig  eth0 |awk  'NR==2{print $2}'
10.0.0.100

#取出ip地址
[root@lxy ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ae:0b:8a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::c653:602a:38c6:e45/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@lxy ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]*'  '{print $2}'
inet
[root@lxy ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]*'  '{print $3}'
10.0.0.100
[root@lxy ~]# ip a s eth0 |  awk 'NR==3' | awk  -F '[ /]'  '{print $6}'
10.0.0.100


[root@lxy ~]# awk  'NR!=1'  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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root
oldboy:123 oldgirl

[root@lxy ~]# awk  '!/root/'  passwd 		#排除包含root的字串
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
oldboy:123 oldgirl
[root@lxy ~]# 

[root@lxy ~]# awk -F:  '/^root/{print $NF}'  passwd #取出滿足以root開頭的行並且打印出該行的最後一列
/bin/bash
root
[root@lxy ~]# awk -F:  '/^root/{print $1,$2}'  passwd 	#列印多列內容
root x
root 

[root@lxy ~]# awk -F:  '/^root/{print $3,$1}'  passwd 	#把第三列和第一列倒著顯示
0 root
 root

sed #三劍客老二,擅長增刪改查,取行和替換。

	-n		#取消預設輸出
	-i		#真實的替換檔案內容
	-r		#支援擴充套件正則
	
	內部命令:
	
		p		#列印
		d		#刪除
		s		#替換
		g		#全域性
		a		#追加
		i		#插入
		;		#多條命令的分割
		,		#表示連續的命令

1.查 

[root@lxy ~]# sed -n  '1p'  passwd 		#列印單行
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# sed  -n  '1,3p'  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@lxy ~]# sed  -n '1p;3p'  passwd 	#列印不連續的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@lxy ~]# sed -n  '$p'  passwd 		#列印最後一行
ntp:x:38:38::/etc/ntp:/sbin/nologin



[root@lxy ~]# sed  -n  '/root/p'  passwd 		#過濾包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed  -n  '/^root/p'  passwd 		#過濾以root開頭的行
root:x:0:0:root:/root:/bin/bash
[root@lxy ~]# sed  -nr   '/root|adm/p'  passwd 	#過濾root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed  -n   '/root/p;/adm/p'  passwd 	#過濾root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed  -n   '/^root/,/adm/p'  passwd 	#過濾以root開頭的行到adm的行
root:x:0:0:root:/root:/bin/bash
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

2.刪除 

[root@lxy ~]# sed  '1d'  passwd 		#刪除第一行

[root@lxy ~]# sed  '$d'  passwd			#刪除最後一行

[root@lxy ~]# sed  '1,20d'  passwd 		#刪除連續的多行

[root@lxy ~]# sed  '1d;20d'  passwd		#刪除不連續的多行

[root@lxy ~]# sed  '/root/d'  passwd 	#刪除包含root的行

[root@lxy ~]# sed -r  '/root|adm/d'  passwd	#刪除不連續的多行

 [root@lxy ~]# sed  '/root/d;/adm/d'  passwd #刪除不連續的多行
 
 [root@lxy ~]# sed  '/^root/,/adm/d'  passwd	#刪除以root開頭的行到包含adm的行
 
 [root@lxy ~]# sed  '1,$d'  passwd 		#刪除所有
 
 
 3.增
 
 [root@lxy ~]# sed  '$aoldboy'  sort.log		#在檔案的最後一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@lxy ~]# sed   '1aoldboy'  sort.log	#在檔案的第一行後面追加oldboy
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2

[root@lxy ~]# sed  '1ioldboy'  sort.log 		#在第一行的前面插入oldboy
oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@lxy ~]# sed  '$ioldboy'  sort.log 		#在最後一行前面插入oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
oldboy
fgrf/2

[root@lxy ~]# sed  '1ioldboy\noldgirl'  sort.log 	#插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@lxy ~]# sed  '$aoldboy\noldgirl'  sort.log 	#追加多行 
abc/1	
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
oldgirl

4.替換 

[root@lxy ~]# cat 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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# sed  's#root#oldboy#g'  passwd 		#把所有的root替換為oldboy   全域性替換 
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@lxy ~]# sed  's#root#oldboy#'  passwd 		#替換每一行第一個匹配條件的
oldboy:x:0:0:root:/root:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@lxy ~]# sed  '10s#root#oldboy#g'  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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin

[root@lxy ~]# sed  '10,11s#root#oldboy#g'  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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
oldboy

[root@lxy ~]# sed  '$s#root#oldboy#g'  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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

[root@lxy ~]# sed  '/^root/s#root#oldboy#g'  passwd 		#替換以root開頭的行中root替換為oldboy
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

[root@lxy ~]# sed  '/t$/s#root#oldboy#g'  passwd 	#匹配以t為結尾的進行替換
root:x:0:0:root:/root:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy

grep #三劍客之老三,grep擅長查詢功能。

#文字過濾,給過濾出來的內容加上顏色

	選項:
	
		-v			#排除,取反
		-i			#忽略大小寫
		-n			#給過濾出來的內容加上所在檔案的行號
		-c			#統計過慮出來的行數
		-o			#只顯示匹配的內容
		-w			#精確匹配
		-E			#支援擴充套件正則
		-r			#遞迴過濾
		-R			#遞迴過濾
		-A			#匹配內容向下多少行 
		-B			#匹配內容向上多少行
		-C			#匹配內容向上向下各多少行
		
		^			#以什麼開頭
		$			#以什麼為結尾
		^$			#空行
		.			#任意一個字元,換行符除外
		.*			#所有
		\			#取消特殊符號的含義
		|			#擴充套件正則,或者
		
[root@lxy ~]# cp  /etc/passwd   ./

[root@lxy ~]# grep  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@lxy ~]# grep  '/sbin/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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
www:x:666:666::/home/www:/sbin/nologin
nginx:x:665:665:nginx user:/var/cache/nginx:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@lxy ~]# grep  -v  '/sbin/nologin'  passwd				#-v		排除
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
test:x:1000:1000::/home/test:/bin/bash

[root@lxy ~]# grep  -i  'root'  passwd				#忽略大小寫
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT

[root@lxy ~]# grep  -n  'root'  passwd 		#顯示該行內容在檔案的所在行號
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

[root@lxy ~]# grep  -c  'root'  passwd 		#統計匹配root字串的行數
2

[root@lxy ~]# grep -o  'root'  passwd 		#只顯示匹配的內容
root
root
root
root
[root@lxy ~]# grep -o  'root'  passwd  | grep -c 'root'   #統計匹配的root的次數
4

[root@lxy ~]# echo -e  'roott\nrootooo'  >>passwd 	
[root@lxy ~]# grep  'root'  passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@lxy ~]# grep  -w  'root'   passwd 			#精確匹配root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@lxy ~]# mkdir   data
[root@lxy ~]# mkdir   test
[root@lxy ~]# echo  'root'  >>data/test.txt
[root@lxy ~]# echo  'root'  >>test/data.txt
[root@lxy ~]# ll
total 680
drwxr-xr-x. 2 root root     22 Dec  3 18:04 data
-rw-r--r--. 1 root root      4 Dec  2 20:19 file.log
-rw-r--r--. 1 root root     27 Dec  2 19:31 file.txt
-rw-r--r--. 1 root root    158 Dec  2 19:26 hosts
-rw-r--r--. 1 root root   1100 Dec  3 18:01 passwd
-rw-r--r--. 1 root root 670293 Dec  2 19:36 services
drwxr-xr-x. 2 root root     22 Dec  3 18:04 test
-rw-r--r--. 1 root root    178 Dec  2 20:14 test.log
-rw-r--r--. 1 root root     16 Dec  2 19:23 test.txt
[root@lxy ~]# grep  'root'  ./*
grep: ./data: Is a directory
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
grep: ./test: Is a directory
[root@lxy ~]# grep  -r  'root'  ./*				#遞迴過濾
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@lxy ~]# grep  -R  'root'  ./*			#遞迴過濾
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@lxy ~]# grep  'root|adm'  passwd 
[root@lxy ~]# egrep  'root|adm'  passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@lxy ~]# grep -E  'root|adm'  passwd 				#擴充套件正則  |  表示或者   -E  支援擴充套件正則
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo

[root@lxy ~]# grep   'adm'  passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@lxy ~]# grep -A2  'adm'  passwd 			#匹配內容的行及向下兩行  
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

[root@lxy ~]# grep -B2  'adm'  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@lxy ~]# grep -C2  'adm'  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
sync:x:5:0:sync:/sbin:/bin/sync

[root@lxy ~]# grep  '^root'  passwd 			#匹配以什麼開頭的行
root:x:0:0:root:/root:/bin/bash
roott
rootooo
[root@lxy ~]# grep  't$'  passwd 				#匹配以誰為結尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
roott
ooroot

[root@lxy ~]# grep  '.'   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@lxy ~]# grep  '\.$'  passwd 			#取消特殊字元的含義
roottt.

[root@lxy ~]# grep  '^$'  passwd 			#表示空行,有空格的和tab鍵的空行不匹配

[root@lxy ~]# grep  '.*'  passwd			#表示所有,包括空行