shell文本处理三剑客(awk sed grep)

本文详细介绍了shell文本处理的三个重要工具:grep、sed和awk。grep用于文本过滤,通过正则表达式筛选符合特定条件的行;sed是一个文本编辑器,支持删除、替换、添加等操作;awk则是文本报告生成器,可以逐行处理文本并进行复杂的数据处理和分析。文章提供了丰富的例子展示这三个工具的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.grep:文本过滤器

根据正则表达式来工作,由正则表达式或者字符及基本的文本字符所编写的过滤条件

tr 'a-z' 'A-Z' < file          ###把passwd中的小写转换为大写


^x      ###以x开头的

x$      ###以x结尾的


-v      ###反选

grep  nologin$  -v  passwd      ###显示能登陆的用户


-E   ^root|root$   ###root在开头的或者在结尾的,|或运算时扩展的要加上-E,用法和grep一样   

grep -n3 root   ###搜索root前后各3行


grep -A3 root   ###搜索root所在行的后三行


grep -B3 root   ###搜索root所在行的前三行


grep -i  root   ###忽略大小写


grep x..y       ###x和y之间有两个字符的


*       ###字符出现任意次

     ###字符出现0到1次

+       ###字符出现1到任意次          

 

{n}       ###字符出现n次


{m,n}     ###字符最少出现m次最多出现n次

{0,n}     ###字符出现0到n次

{m,}      ###字符至少出现m次


(xy){n}   ###xy出现n次

grep  \<关键字\>    ##搜索关键字


二.sed:文本编辑器

用来操作纯ASCII码的文本,把当前处理的行存储在临时缓冲区,可以仅仅处理指定的行,符合条件的处理,不符合的不处理,完成后把缓冲区的内容输出到屏幕,紧接着处理下一行,直到文件结束

p   ##显示

d   ##删除

a   ##添加

c   ##替换

w   ##写入

i    ##插入

-n   ##安静模式,只有经过sed处理的那行才会显示出来

(1)p   ##显示


sed  -n  '2,6!p'  passwd    ##2行和6行不显示


(2)d   ##删除

sed  '2,6!d'  passwd     ##2到6行的不删除

(3)c   ##替换

-i    ###修改完成之后就保留在原文件里


替换httpd默认端口的脚本



(4)a   ##添加


(5)w   ##写入


sed '1r test' passwd    ##把test的内容添加到passwd文件的第二行


sed  -n '/root/='  passwd    ##把root所在行行号打印出来


(6)sed的其他用法

sed -f rule test              ###把策略写在rule文件中直接修改文加test


sed '=' passwd | sed 'N;s/\n//g'   ###给每一行标号,并且删除换行符


sed  -n  '$p'  test     ###输出最后一行

sed  -n  '1p'  test     ###输出第一行


sed  -e  '=;!G'  test   v ##-e同时执行两个策略,加行号,并且把每行分开


.awk

awk:文本报告生成器,逐行处理文本,支持在处理第一行之前,做一些准备工作,以及在处理完后做一些总结性质的工作

BEGIN{ }:读入第一行文本之前执行,一般用来初始化操作

{ }:逐行读入进行处理

END{ }:处理完最后一行后执行,一般由来输出处理结果

awk  -F : '$7~/bash$/{print $0}' /etc/passwd        ###第7列是以bash$结尾的输出这行($0 ##表示输出此行)


awk  -F : '$7~/bash$/{print $1}' /etc/passwd        ###第7列是以bash$结尾的输出第一列,并且统计能登陆用户的个数


awk -F : 'BEGIN{i=0}/bash$/{i++;print $1}END{print i}' passwd   ###查找用户是否能登录,并输出登录用户的用户名和个数


awk 'NR>=3&&NR<=5{print}'   /etc/passwd    ##输出在第3行到第5行之间的行


awk -F : 'BEGIN{i=0}$7~/bash$/{i++;print}END{print i}' passwd   ###查找用户是否能登录,并输出登录用户的信息和个数


awk 'BEGIN{a=4;print a+2}'      ##awk也可以做运算


awk  -F : 'NR==1{print}' /etc/passwd           ###恒定输出第一行

抓取IP:


awk  -F : '{print  $1," is readlly"}'   /etc/passwd    ##添加输出的字符串 


补充:

fmt  -s  -w 10 <<EOF  ##一行只能输出10个字符,否则自动换行


tail -n  10 -f /var/log/messages        ##动态查看日志


awk  grep  sed其三者的应用丰富多样,文本处理是比较灵活的,只要符合规则,可以任意组合;面对不同的问题,写出多样的,符合实际情况的策略

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值