shell中文本处理工具三剑客grep、sed、awk

shell中文本处理工具三剑客grep、sed、awk

1、grep

全称是Globally search a Regular Expression and Print,grep是贪婪模式,只要符合条件全收
grep -E = egrep 扩展的grep
(1)grep root passwd 过滤root关键字
(2)grep -i root passwd 忽略大小写
(3)grep -E "\<root" passwd root字符之前不能有字符
(4)grep -E "root\>" passwd root字符之后不能有字符
(5)grep -数字 root passwd 显示过滤行以及上面几行和下面几行
(6)grep -n root passwd 显示匹配的行所在行号
(7)grep -A数字 root passwd 显示过滤行以及下面几行
(8)grep -B数字 root passwd 显示过滤行以及上面几行
(9)grep -v 反向过滤
在这里插入图片描述
练习1:只抓取在中间的root,root开头的root结尾的不要。
思路是先抓取所有含root的,然后抓取root开头或者root结尾的,最后一反向过滤。
在这里插入图片描述

grep字符数量匹配规则
^westos 以westos开头
westos$ 以westos结尾
w....s w开头s结尾中间4个任意字符
.....s s结尾前面5个任意字符
* 字符出现任意
? 0到1次
+ 1次到任意次
{n} n次
{m,n} m到n次
{0,n} 0-n次
{,n} 0-n次
{m,} 最少m次
(lee){2} lee字符串出现2次
在这里插入图片描述
练习脚本2:请显示系统中能被su命令切换的用户名称
思路是passwd文件中bash或者sh结尾的就是可以su切换的。
在这里插入图片描述

2、sed流编辑器

命令格式: sed 参数 命令 处理对象
(1)p 打印
sed -n 5p westos 显示第五行
sed -n 3,5p westos 显示3到5行
sed -n '3p;5p' westos 显示3和5行
sed -n 1,5p westos 显示1-5行
sed -n '5,$p' westos 显示5到最后一行
sed -n '/^root/p' westos 显示以root开头的行
在这里插入图片描述
(2)d 删除
sed 5d westos 删除第五行
sed '/^#/d' westos 把#开头的行删除
sed '/^UUID/!d' westos 除了UUID以外的行都删除
sed '5,$d' westos 删除5到最后一行
在这里插入图片描述
(3)a 添加(下方加)
sed '5a hello world' westos 第五行添加hello word
sed '5a hello\nworld' westos 第五行添加hello 换行word
sed '/^#/a hello world' westos 以#开头的行添加hello word
在这里插入图片描述
(4)c 替换
sed '/^#/c hello world' westos 把以#开头的行替换成hello world
sed '5chello world' westos 把第五行替换成hello world
在这里插入图片描述
(5)w 把符合的行写到指定文件中
sed '/^UUID/w westofile' westos 把westos中UUID开头的行写入westosfile中
在这里插入图片描述
(6)i 插入(上面加)
sed '5ihello westos' westos 第五行插入hello westos
在这里插入图片描述
(7)r 整合文件
sed '5r haha' westos 把haha这个文件整合到westos文件的第五行
sed -i '5r haha' westos 把处理过后的结果保存到原文件中
在这里插入图片描述
sed '=' passwd 表示加行号,但是是另外的一行
sed '=' passwd | sed 's/\n//g' 表示把换行符换为空,但是他是一行一行读取的,没法识别
sed '=' passwd | sed 'N;s/\n//g' 提前加载下一行,就可以成功替换
sed '=' passwd | sed 'N;s/\n//g' > westos 导出到westos文件
在这里插入图片描述
sed 'G' westos 表示每行后面空一行
sed '$G' westos 表示最后一行后面空一行
sed '$!G' westos 表示除了最后一行其他行后面空一行
在这里插入图片描述
sed字符替换:
(1)sed 's/:/###/g' westos 全文冒号替换为###
(2)sed 's/:/###/' westos 全文的每行第一次出现的冒号替换为###
(3)sed '1,5s/:/###/g' westos 1到5行冒号替换为###
(4)sed '1s/:/###/g' westos 第1行冒号替换为###
(5)sed '1s/:/###/g;5s/:/###/g' westos 第1行和第5行冒号替换为###
(6)sed '/lp/,/shutdown/s/:/###/g' westos 从lp到shutdown的冒号替换为###
(7)sed 's/\//###/g' westos 全文的/替换为###
(8)sed 's@/@###@g' westos 全文的/替换为###
如果要替换的字符是特殊字符,如/,前面要加转译字符\,即\/。或者sed 's@/@%%%%%@g' westos
在这里插入图片描述
练习脚本3:假设selinux为关闭状态,Apache_port.sh此脚本后没有接入数字,提示‘请输入端口号’;如果后面的数字被占用了,提示‘该端口已被占用’;如果该端口没被占用,就把apache的端口修改为该数字。
在这里插入图片描述
效果如下图
在这里插入图片描述

3、报告生成器awk

awk -F 分隔符 BEGIN{ }{ }END{ } FILENAME
(1)westos westos变量值
(2)“westos” westos字符串
(3)/条件1|条件2/ 条件1或者条件2
(4)/条件1/||/条件2/ 条件1或者条件2
(5)/条件1/&&/条件2/ 条件1并且条件2
(6)$0 所有的列
(7)$1 第一列
(8)$2 第二列
在这里插入图片描述
练习脚本4:统计在系统中能su切换的并且用户家目录不在/home下的用户数量
思路:第一步awk -F : '/bash$|sh$/&&$6!~/home/{print $1}' /etc/passwd 以冒号为分隔符的前提下,显示/etc/passwd中,bash或者sh结尾的并且第六列中没有home关键词的这行的第一列;第二步awk -F : 'BEGIN{N=0}/bash$|sh$/&&$6!~/^\/home/{N++}END{print N}' /etc/passwd 以冒号为分隔符的前提下,统计/etc/passwd中,bash或者sh结尾的并且第六列中没有以/home开头的行数。
在这里插入图片描述

练习脚本5:统计进程中的内存使用量的总和
思路:第一步ps ax -o %mem | awk 'BEGIN{N=0}{N+=$1}END{print N}'列出所有进程的内存,刚开始令N为0,过程中连加,最后输出N值;第二步ps ax -o %mem | awk 'BEGIN{N=0}!/%MEM|0.0/{N+=$1}END{print N}'为了优化,把%MEM和0.0的行忽略不计,会加速。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值