文本处理工具

文本处理工具

grep

grep [Globally search a Regular Expression and Print]
grep是搜索关于正则表达式的表达式,并且将其打印出来
正则表达式分为通配符类和扩展类
grep 通配符类
grep -E=egrep 扩展类
grep匹配的格式是贪婪模式,只要中间包含你所搜索的,都会过滤出来

  • grep格式

     grep 匹配条件  处理文件
     
     grep root passwd  			##过滤root关键字
     grep ^root passwd 			##过滤以root 开头
     grep root$ passw d  		##过滤以root 结尾
     grep -i root passwd 		##过滤root,忽略大小写
     grep -E "\<root" passwd 	##root字符之前不能有字符
     grep -E "root\>" passwd 	##root字符之后不能有字符
     grep -E "\<root\>" passwd  ##root前面和后面都不能有字符
     grep -数字  				##显示过滤行以及上面几行和下面几行
     grep -n 					##显示匹配的行所在行号
     grep -A 					##显示过滤行以及下面几行
     grep -B 					##显示过滤行以及上面几行
     grep -v 					##反向过滤
     
    
     grep 字符数量匹配规则
     
     w...s   					##w开头s结尾,中间有三个任意字符
     ....s 						##s结尾前面有4个任意字符
     *							##字符出现任意 
     ?							##字符出现0到1次	
     +							##字符出现1次到任意次
     {n}						##字符出现n次	
     {m,n} 	 					##字符出现m到n次
     {0,n} 					##字符出现0-n次
     {,n}						##字符出现0-n次
     {m,}						##字符出现最少m次
     (lee){2}					##lee字符串出现2次
    
    • 实验

       cat /etc/passwd -b | head -n 14 /mnt/westos						##导入文件做实验素材
       head -n 14 /etc/passwd > /mnt/passwd
      
       grep root passwd
       grep -E "\<root" passwd   		##root前面不能有字符
       grep -E "\<root\>" passwd  	##root前面后面都不能有字符
       grep -iE "\<root\>" passwd		##root前面后面都不能有字符,且不论大小写都过滤
       grep -inE "\<root\>" passwd	##root前面后面都不能有字符,且不论大小写都过滤,且显示行号
      
       grep lp westos				##过滤lp字符
       grep -3 lp westos			##过滤lp这一行和上三行下三行
       grep -A3 lp westos			##显示lp这一行和下面三行
       grep -B3 lp westos			##显示lp这一行和上面三行
      
       vim  westos
       grep ws westos			
       grep w..s westos				##开头为w,结尾为s,中间有两个任意字符
       grep "w.*s" westos				##开头为w,结尾为s,中间任意字符
       grep  -E "w.{3}s" westos 		##开头为w,结尾为s,中间有三个字符
       grep  -E "w.?s" westos			##开头为w,结尾为s,中间有0或1个字符
       grep  -E "w.+s" westos			##开头为w,结尾为s,中间有一个及以上字符
       grep  -E "w.{2,}s" westos		##开头为w,结尾为s,中间有两个以上字符
       grep  -E "w.{2}s" westos		##开头为w,结尾为s,中间有两个字符
       grep  -E "w.{,2}s" westos		##开头为w,结尾为s,中间最多有两个字符
       grep  -E "wa{1,3}s" westos		##开头为w,结尾为s,中间a有1到3个字符
       grep  -E "wa{,2}s" westos		##开头为w,结尾为s,a的字符有最多两个
       grep  -E "wa{2,}s" westos		##开头为w,结尾为s,a的字符有最少两个
       grep -E "w.{1}s|w.{3}s" westos ##开头为w,结尾为s,中间字符为一个或者三个
       grep -E “w(ae){,3}s”westos    ##开头为w,结尾为s,ae这个组合的个数最多三个
      

sed

显示文件中符合条件的行或者对文件内容进行替换

  • 命令格式:

      sed 参数 命令  处理对象
      sed 参数 处理对象 -f 处理规则文件
    
      cp /etc/fstab  /mnt  						  ##做实验素材
    
  • p显示

     cat -b fstab | sed 5p  ##第五行多显示一次
     cat -b fstab | sed -n 5p   ##只显示第五行
     cat -b fstab | sed -n 5,7p  ##显示5-7行
     cat -b fstab | sed -ne  '5p;7p'  ##显示5和7行
     cat -b fstab | sed -ne '5,$p'  ##显示第五行之后所有
     sed -ne '/^#/p'  fstab   ##显示以#开头的
     sed -ne '/^#/!p'  fstab   ##显示不是以#开头的
    

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

  • d删除

      sed 5d fstab 					 ##删除第五行
      sed '/^#/d'  fstab  			 ##把#开头的行删除
      sed '/^UUID/!d' fstab 		 ##把除了UUIS以外的行都删除
      sed -e '5,$d' fstab     
    

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

  • a添加,添加在某一行的下面

     cat -b fstab > westos  			##westos中的文件有行号
     sed '5a hello' westos				##在第五行的下面添加hello
     sed '$a hello' westos				##在最后一行的下面添加hello
     sed '/#/a hello' westos			##给每个#号那一行的下面添加 
    

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

  • i插入。插入在某一行的上面

     sed '5i hello' westos			##给第五行上面插入
     sed '/#/i hello' westos		##给所有带有#号的那一行的上面插入
    

在这里插入图片描述

  • c 更改

     sed '/^#/c hello' fstab			##更改有#号的所有行
     sed '5c hello' fstab				##更改第五行
    

在这里插入图片描述

  • w 把符合的行写到指定文件中
    sed -n ‘/UUID/w file’ fstab ##将UUID开头的行写入文件file
    在这里插入图片描述

  • r 整合

     sed '2rwestos' westos.new 		##wstos中的文件整合到westos.new文件的第二行的后面
     sed '$rwestos' westos.new 		##wstos中的文件整合到westos.new文件的最后一行的后面
    

在这里插入图片描述

  • sed字符替换

     cp /etc/passwd .							##生成实验资源
     
     sed 's/sbin/###/g' passwd					##显示passwd文件,将全文的sbin改为###
     sed '1,5s/sbin/###/g' passwd				##显示passwd文件,将1-5行的sbin改为###
     sed '/lp/,/halt/s/sbin/###/g' passwd		##显示passwd文件,将lp和halt字符之间的sbin改为###
     sed 's/\//###/g' passwd					##显示passwd文件,将全文的/改为###
     sed 's@/@###@g' passwd
     vim rule									##编辑规则,写''中间的
     sed -f rule  passwd 						##显示passwd文件,且按照这个规则的要求
     sed -f rule -i passwd						##按照rule规则把passwd文件修改
    

在这里插入图片描述

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

在这里插入图片描述

awk 报告生成器

格式:
awk -F 分隔符 BEGIN{}{}}END{}  FILENAME

NR   				##行数
NF  				##列数
FILENAME 			##文件名称本身
westos 				##westos变量值
“westos”			##westos字符串

/bash$/ 			##条件
/条件1/条件2/  		##条件1或者条件2
/条件1/||/条件2/  	##条件1或者条件2
/条件1/&&/条件2/  	##条件1并且条件2

$0 					##所有的列
$1  				##第一列
$2 					##第二列

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

在这里插入图片描述

awk -F : '{print $1}' passwd     	 					##打印文件第一列
awk -F : '{print $1 " " $2}' passwd						##打印文件第一第二列
awk -F : '{print $0}' passwd							##打印全文
awk -F : 'BEGIN{print  "QIAN"}{print $1}END{print "HOU"}' 
														##打印第一列,在第一列的前面加上QIAN在第一列的后面加上HOU
awk -F : '{print FILENAME}'  /mnt/passwd   				##打印文件的名称
awk -F : '{print NF}'  /mnt/passwd						##打印文件的列数
awk -F : 'BEGIN{linux=4}{print linux}' /mnt/passwd 		##打印变量值
awk -F : 'BEGIN{linux=4}{print "linux"}' /mnt/passwd	##打印字符串
awk -F : '/gin$/&&/^d/{print $1}' /mnt/passwd			##文件中gin结尾并且d开头的那一行的第一列
awk -F : '/gin$/||/^ha/{print $1}' /mnt/passwd			##文件中gin结尾或者ha开头的哪一行文件的第一行打印出来
awk -F : '$7~/\/bash$/||/\/halt/{print $1}' passwd  	##文件第七列/bash结尾或者/halt结尾的行的第一串字符						

练习题:
统计在系统中能su切换的并且用户家目录不在/home下的用户数量。

awk -F : 'BEGIN{N=0}/bash$|sh$/&&$6!~/^\/home/{N++}END{print N}' /etc/passwd

显示出主机的地址是什么?

ifconfig ens160 | awk '/inet\>/{print $2}'	

统计/mnt/passwd中有多少行?

awk 'END{print NR}' /mnt/passwd

将/mnt/passwd中最后一行的shell找出来

awk -F : 'END{print $NF}' /mnt/passwd									
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值