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

一.grep:文本过滤器

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

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

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

^x      ###以x开头的

x$      ###以x结尾的

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

-v      ###反选

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

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

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

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

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

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

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

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

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

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

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

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

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

*       ###字符出现任意次

     ###字符出现0到1次

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

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

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

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

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

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

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

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

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

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

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

二.sed:文本编辑器

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

p   ##显示

d   ##删除

a   ##添加

c   ##替换

w   ##写入

i    ##插入

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

(1)p   ##显示

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

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

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

(2)d   ##删除

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

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

(3)c   ##替换

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

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

替换httpd默认端口的脚本

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

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

(4)a   ##添加

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

(5)w   ##写入

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

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

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

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

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

(6)sed的其他用法

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

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

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

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

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

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

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

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

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

.awk

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

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

{ }:逐行读入进行处理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

抓取IP:

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

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

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

补充:

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

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

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

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

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