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@qls ~]# sed -n  '1p'  passwd 		#打印单行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# 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@qls ~]# sed  -n '1p;3p'  passwd 	#打印不连续的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed -n  '$p'  passwd 		#打印最后一行
ntp:x:38:38::/etc/ntp:/sbin/nologin



[root@qls ~]# sed  -n  '/root/p'  passwd 		#过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed  -n  '/^root/p'  passwd 		#过滤以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# sed  '1d'  passwd 		#删除第一行

[root@qls ~]# sed  '$d'  passwd			#删除最后一行

[root@qls ~]# sed  '1,20d'  passwd 		#删除连续的多行

[root@qls ~]# sed  '1d;20d'  passwd		#删除不连续的多行

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

[root@qls ~]# sed -r  '/root|adm/d'  passwd	#删除不连续的多行

 [root@qls ~]# sed  '/root/d;/adm/d'  passwd #删除不连续的多行
 
 [root@qls ~]# sed  '/^root/,/adm/d'  passwd	#删除以root开头的行到包含adm的行
 
 [root@qls ~]# sed  '1,$d'  passwd 		#删除所有
 
 
 3.增
 
 [root@qls ~]# sed  '$aoldboy'  sort.log		#在文件的最后一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@qls ~]# sed   '1aoldboy'  sort.log	#在文件的第一行后面追加oldboy
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2

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

[root@qls ~]# sed  '1ioldboy\noldgirl'  sort.log 	#插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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@qls ~]# 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			#表示所有,包括空行
上一篇:sed使用


下一篇:linux-sed