shell之文本处理工具三剑客

文本处理工具

grep

- grep 格式
- grep 匹配条件  处理文件
- grep -E = egrep            ##E是扩展的意思可以相当于或
- grep -E 'halt|lp'  file    ##查找halt或者lp存在的行
- grep root passwd		     #过滤root关键字
- grep ^root passwd		     ##以root开头
- grep root$ passwd		     ##以root结尾
- grep -i root passwd 		 ##忽略大小写
- grep -E "\<root" passwd    ##root字符之前不能有字符
- grep -E "root\>" passwd    ##root字符之后不能有字符
- grep -数字	passwd /etc/passwd	     ##显示过滤行以及上面几行和下面几行
- grep -n2  passwd	/etc/passwd		 ##和上面一个意思
- grep -n 	passwd	/etc/passwd	     ##显示匹配的行所在行号
- grep -A	passwd	/etc/passwd	 	 ##显示过滤行以及下面几行
- grep -B	passwd	/etc/passwd		 ##显示过滤行以及上面几行
- grep -v	passwd	/etc/passwd		 ##反向过滤
-  
-  
- grep字符数量匹配规则
- 	^westos				##以westos开有	
-	westos$				##以westos结尾
-	w....s				##w开头s结尾中间4个任意字符
-	.....s				##s结尾前面5个任意字符
-	*					##字符出现0-任意
-	?					##0到1次
-	+					##1次到任意次
-	grep -E "we+s" 文件名
-		{n}					##n次
-		{m,n}				##m到n次
-		{0,n}				##0-n次
-		{,n}				##0-n次
-		{m,}				##最少m次
-		(lee){2}			##lee字符串出现2次
-	练习脚本:
-		请显示系统中能被su命令切换的用户名称
-		grep -E "bash$|sh$" /etc/passwd | cut -d : -f 1

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

sed

- 命令格式:
-	sed 参数 命令 处理对象
-	sed 参数 处理对象 -f 处理规则文件(自己写,里面是命令)
-	 
- 	对字符的处理
-	  p	  ##显示
-			sed -n  5p westos		      ##显示第五行,n表示静默输出,不显示模式空间内容##没有-n 会显示两遍,因为有模式空间
-		sed -n  3,5p westos		          ##显示3到5行
-		sed -ne  "3p;5p" westos		      ##显示3和5行,几个e几个策略,加双引号可以简略用一个e
-		sed -n 1,5p westos		          ##1-5行
-		sed -n '5,$p'	westos		      ##5到最后一行
-		sed -n '/^#/p' fstab		      ##显示以#开头的行	

-	  d	  ##删除
-		sed 5d	westos			          ##删除第五行
-		sed '/^#/d'	fstab		          ##把#开头的行删除
-		sed '/^UUID/!d' fstab		      ##除了UUID以外的行都删除
-		sed -e '5,$d' westos		      ##删除5到最后一行(不加e也可以)

-	  a   ##添加
-		sed -e '$a hello world' fstab     ##最后一行添加,$表示最后一行,e表示多条命令(此处不加e也可)
-		sed -e '/^#/a hello world' fstab  ##以#开头的行后加hello world
-		sed '/nologin/a hello world' file ##nologin的行后面加hello world

-	  c	##替换
-		sed -e '/^#/c hello world' fstab  ##以#开头的替换成hello world 
-		sed '5c hello world' westos		  ##第五行替换成hello world

-	  w	##把符合的行写到指定文件中
-		sed '/^UUID/w westofile' westos	  ##把westos中UUID开头的行写入westosfile中
-		sed '/nologin/w file1' file       ##把file中不能登陆的行写入file1

- 	  i	##插入
-		sed '5ihello westos' westos	      ##第5行插入hello westos^
-		sed '/nologin/i heoo' file        ##nologin 所在行写入heoo
-	
-	  r	##整合文件
-		vim haha
-		sed '5r haha' westos		      ##把haha文件内容放到westos文件的第5行之后,此处haha是一个文件

-	  sed 字符替换
-	  sed 's/:/###/g' westos              ##将westos文件中:替换成###
-	  sed '1,5s/:/###/g' westos 	      ##1到5行的:替换成###
- 	  sed '1s/:/###/g;5s/:/###/g' westos  ##1到5行的:替换成###
-	  sed '/lp/,/shutdown/s/:/###/g' westos        ##lp和shutdown之间的:替换成###
-     sed 's/\//####/g' westos 		
-	  sed 's@/@####@g' westos 		               ##@和/是一个意思,都表示分割符
-	  sed -e 's/:/###/g' -e 's@/@####@g' westos    ##-e处理多条语句
-	  sed 's@/@####@g' -i  westos 		           ##把sed处理的内容保存到westos文件中(修改的是westos文件内容,修改后覆盖原来内容)

-	练习及脚本
-		Apache_port.sh
-		此脚本后加入数字
-		http的端口就改为此数字
-		假设selinux为关闭状态

在这里插入图片描述
p显示
在这里插入图片描述
d删除

在这里插入图片描述

在这里插入图片描述

a 增加
- sed -e ‘$a hello\nworld’ fstab
在这里插入图片描述
插入在这里插入图片描述

c 替换

在这里插入图片描述
w 写入文件
插入
在这里插入图片描述
i 插入

插入
r 整合文件
在这里插入图片描述
替换(沿用vim里面替换的手法)

在这里插入图片描述

在这里插入图片描述

脚本练习:修改Apache端口

在这里插入图片描述

在这里插入图片描述

awk 报告生成器

- 格式
- 	awk -F 分隔符 ‘BEGIN{}{}END{}‘ FILENAME
- NR		            #行数
- NF 		            #列数
- FILENAME	            #文件名称本身
- westos		        #westos变量值
- “westos” 	            #westos字符串

- /bash$/			    #条件(以bash 结尾)
- /条件1|条件2/		    #条件1或者条件2
- /条件1/||/条件2/	    #条件1或者条件2
- /条件1/&&/条件2/	    #条件1并且条件2

- $0			        #所有的列
- $1			        #第一列
- $2			        #第二列
- $3			        #第三列
- $1,3               	#第一列和数字3
- $1"###"$3            	#第一列和第三列以###分隔开
- awk -F : 'BEGIN{westos=1}{print westos}' file  ##先设定westos变量指,然后显示westos变量
- awk -F : 'BEGIN{westos=1}{print westos}END{print "end"}' file  ##以end结束,要用双引号  
- awk -F : '/bash$/{print $1}' file     ##输出以bash结尾的第一列
- awk -F : '/bash$/||/^root/{print $1}' file ##输出以bash结尾或者以root开头的第一列
- awk -F : '/bash$/&&/root/{print $1}' file  ##以bash结尾,且包含root的第一列
- awk -F : '!/bash$/&&/root/{print $1}' file  ##不以bash结尾,且包含root的第一列。!需要放在//前
- awk -F : '/bash$|root/{print $1}' file      ##以bash结尾或者包含root的第一行

- #/etc/passwd文件的第六列没有home关键字并且以bash结尾的行	
-	awk -F : '$6!~/home/&&/bash$/{print $1}' /etc/passwd

- 课后练习:
- 统计在系统中能su切换的并且用户家目录不在/home下的用户数量
- 	awk -F : 'BEGIN{n=0}$6!~/home/&&/bash$/{n++}END{print n}' /etc/passwd

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
脚本练习

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值