三剑客-grep-awk-sed

三剑客-grep-awk-sed

grep

格式:

grep 参数 过滤文件内容 文件名称

cat file|grep '过滤的内容'

​ 参数: -v 取反

​ -E 支持扩展正则 | 或者 egrep ‘$|#’

​ -n 显示过滤内容的行号

​ -o 查看匹配过滤过程

例:

 [root@oldboyedu ~]# grep root passwd
			root:x:0:0:root:/root:/bin/bash
			[root@oldboyedu ~]# grep root passwd -o
			root
			root
			root

awk

awk 过滤内容和统计数据

格式:

​ awk '/匹配模式/{动作}' file

​ cat file|awk '模式{动作}'

参数:

​ awk中 动作的逗号 表示空格
​ awk 内置变量
​ $1 $2 过滤列
​ NR 过滤行号
​ , 即空格
​ NF 最后一列的列号

​ -F 指定分隔符

例:

只有模式没有动作 默认输出模式匹配到的内容
	 [root@oldboyedu ~]# awk '/root/' passwd 
	  root:x:0:0:root:/root:/bin/bash
	  
    [root@oldboyedu ~]# awk '/root/,/adm/' 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

	[root@oldboyedu ~]# awk 'NR==1' passwd           #过滤行号等于1的行
	root:x:0:0:root:/root:/bin/bash
	
	[root@oldboyedu ~]# awk -F: '$3==0' passwd       #-F指定分隔符是冒号: $3是第三列  以:为分隔符过滤出第三列等于0的行
	root:x:0:0:root:/root:/bin/bash

	[root@oldboyedu ~]# awk -F: '$3>0' passwd        # 以:为分隔符过滤出第三列等于0的行
	bin:x:1:1:bin:/bin:/sbin/nologin
	daemon:x:2:2:daemon:/sbin:/sbin/nologin          #第三列数值为用户的uid号
	adm:x:3:4:adm:/var/adm:/sbin/nologin
	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
	
	
	模式+动作              #过滤出root到adm的行中的第一列信息
	[root@oldboyedu ~]# awk -F: '/root/,/adm/{print $1}' passwd         
	root
	bin               
	daemon
	adm

	 
	 输出行号            #过滤行号,输出第一列信息--→行号
	 [root@oldboyedu ~]# awk -F: '{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
		
		
		
	wc 统计数量
	   -l 统计行号 
	   -L 统计文件中最长的行的长度
	 

	[root@oldboyedu ~]# awk -F: ' $3>0 && $3<1000' /etc/passwd|wc -l
	22                                                    #过滤uid大于3和小于1000的行,wc -l 进行统计,由此可过滤出系统中的虚拟用户
	[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd
	root:x:0:0:root:/root:/bin/bash                       #过滤uid等于0的行
	[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd|wc -l
	1                                                     #过滤uid等于0的行 wc -l  进行统计
	[root@oldboyedu ~]# awk -F: '$3>=1000' /etc/passwd|wc -l
	3
	
	
	

sed

sed 取行 过滤字符串 替换
格式:
sed '/过滤字符串/' file
cat file|sed '/过滤字符串/'

参数:

​ -n 取消默认输出
​ -i 修改源文件
​ sed执行过程:
​ 一行一行的处理
​ 如果对当前的行 没有动作 默认输出到屏幕

​ sed 增 删 改 查

例:

sed 之 查内容 
	   按照字符串匹配
		[root@oldboyedu ~]# sed -n '/root/p' passwd 
		root:x:0:0:root:/root:/bin/bash

		[root@oldboyedu ~]# sed -n '/^root/p' passwd 
		root:x:0:0:root:/root:/bin/bash
		[root@oldboyedu ~]# sed -n '/^ro/p' passwd 
		root:x:0:0:root:/root:/bin/bash
		[root@oldboyedu ~]# sed -n '/sh$/p' passwd 
		root:x:0:0:root:/root:/bin/bash

		[root@oldboyedu ~]# sed -n '/root/,/adm/p' 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

		[root@oldboyedu ~]# sed -n '3p' passwd 
		daemon:x:2:2:daemon:/sbin:/sbin/nologin
		[root@oldboyedu ~]# sed -n '2p' passwd 
		bin:x:1:1:bin:/bin:/sbin/nologin
		[root@oldboyedu ~]# sed -n '1p' passwd 
		root:x:0:0:root:/root:/bin/bash


		[root@oldboyedu ~]# 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@oldboyedu ~]# sed -n '$p' passwd 		# 最后一列
		lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sed之增加内容 
		a 在n行后面追加新的内容
		[root@oldboyedu ~]# cat test.txt
		lidao 2
		alex 2
		oldboy 3
		test 1
		[root@oldboyedu ~]# sed '2a oldboy111' test.txt
		lidao 2
		alex 2
		oldboy111
		oldboy 3
		test 1

		
		i 在当前行插入新的内容 
		[root@oldboyedu ~]# sed '2i oldboy111' test.txt
		lidao 2
		oldboy111
		alex 2
		oldboy 3
		test 1

		c  替换当前整行的内容
		[root@oldboyedu ~]# sed '2c oldboy111' test.txt
		lidao 2
		oldboy111
		oldboy 3
		test 1

			
		[root@oldboyedu ~]# sed -i '7c SELINUX=disabled' /etc/selinux/config
		
		w 保存当前的内容至文件 没啥用
		
		[root@oldboyedu ~]# sed '1,3w newfile.txt' test.txt
		lidao 2
		alex 2
		oldboy 3
		test 1

sed之删除
			格式:
				 sed  '3d' file
		
			[root@oldboyedu ~]# sed  '3d' test.txt
			lidao 2
			alex 2
			test 1
			[root@oldboyedu ~]# sed  '1,3d' test.txt
			test 1

		[root@oldboyedu ~]# sed  '/root/d' 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

		
sed替换
		sed 's#替换谁#替换成什么#g'
		sed 's///g'
		sed 's@@@g'
		s   替换标志
		g 全局替换
		[root@oldboyedu ~]# sed 's#root#oldboy#g' passwd 
		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
		oldboy:x:oldboy:var/var:sbin/login

		[root@oldboyedu ~]# sed 's#200#201#g' /etc/sysconfig/network-scripts/ifcfg-eth0
		TYPE=Ethernet
		BOOTPROTO=none
		NAME=eth0
		DEVICE=eth0
		ONBOOT=yes
		IPADDR=10.0.0.201
		PREFIX=24
		GATEWAY=10.0.0.254

		[root@oldboyedu ~]# sed 's#[:/0-9x]# #g' /etc/passwd|xargs -n1|sort |uniq -c|sort -rn|head
		 25 sbin
		 19 nologin
		  8 bin
		  7 var
		  4 root
		  4 oldboy
		  4 bash
		  3 sync
		  3 spool
		  3 shutdown

		[root@oldboyedu ~]# sed 's#[:/0-9]# #g' /etc/passwd|xargs -n1|awk '{count[$1]++}END{for(i in count) print i,count[i]}'|awk '{print $2,$1}'|sort -rn|head|grep -v x
		25 sbin
		19 nologin
		8 bin
		7 var
		4 root
		4 oldboy
		4 bash
		3 sync
		3 spool

原文地址:https://www.cnblogs.com/yangte/p/13964111.html