【Linux上分之路】第十二篇:Linux三剑客grep、sed、awk

冲

Linux三剑客

Linux三剑客是grep、sed、awk三者的简称,熟练使用这三个工具程序可以提升工作效率,Linux三剑客是以正则表达式作为基础

Linux正则表达式

三剑客特点及应用场景

命令特点场景
grep过滤grep命令过滤文件速度是最快的
sed替换、修改文件内容对文件内容进行替换、修改,进行范围性的查找
awk取列,统计计算进行对比,比较(>、<、>= …);统计计算

grep

grep:命令全称为global regular expressions print,gerp命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子

grep命令的基本格式

grep [选项] 模式 文件名
选项:
-E:等同于egrep支持扩展正则表达式
-A:意为after,-A5 匹配内容并且显示接下来的5行
-B:意为before,-B5 匹配内容并且显示上面的5行
-c:列出文件中包含模式的行数,等同于wc -l
-v:列出没有匹配模式的行
-n:列出行号
-w:精准匹配,把表达式当做一个完整的单字符来搜寻

grep范例

grep命令范例文件emp.txt

101:China:Clack
102:American:Franklyn
103:England:Shelock
104:Canada:Henry
105:Russian:Wendy
106:Japan:Sukura
107:Korea:Irene
108:Germany:Bob

grep命令选项

-A、-B

Linux三剑客grepAB

-c、-v
Linux三剑客grepcv
-n、-w
Linux三剑客grepnw

grep的命令很强大,通过利用它的不同选项以及千变万化的正则表达式可以过滤出我们所需要的信息

sed

sed:命令全称为stream editor,流编辑器,主要用来过滤和替换文本

Linux三剑客sed简介

sed命令基本格式

sed [-nefr] [操作]
选项:
-n:只有经过sed处理的那一行内容才会别列出来,不加n默认显示所有内容
-e:直接到命令行模式上进行sed操作
-f:将sed操作写在一个文件内
-r:sed的操作使用的是扩展型正则表达式,默认为基础正则表达式
-i:直接修改文件内容而不是屏幕输出
操作说明:[n1,[n2] ] function
n1,n2:选择进行操作的行数
function选项:
c、a、i:新增字符
d:删除
p:打印,将选择的数据整个打印出来,以行号为单位
s:替换,可以直接进行替换工作,可以搭配使用正则表达式,以行号为单位

sed命令功能

sed本身是一个管道命令,可以将数据进行替换、删除、新增、选取等特定功能

功能功能说明
ssubstitute替换
p显示print
d删除delete
cai增加

sed执行过程

sed命令:sed -n ‘3p’ emp.txt,输出结果为:
在这里插入图片描述

sed执行流程

在这里插入图片描述

sed流程解析

  1. sed程序执行sed命令:sed -n ‘3p’ emp.txt 进行处理
  2. sed为流编辑器,对文件emp.txt内容一行一行读入内存中进行处理,将读入内存的一行内容进行判断
  3. 判断是否为第三行内容,不是则判断是有选项n,有则直接处理下一行,没有则将内存中写入的文件的一行内容输出
  4. 若判断文件改行的内容为第三行,则进行sed命令的功能操作,该命令中为p则打印第三行内容
  5. 例子当中没有加n选项时,第三行内容输出了两遍,是因为没有n时为默认输出,则文件中中的内容全部输出,但是又因第三行满足命令所需,则又会输出一次

sed功能

查找

在这里插入图片描述

删除

Linux三剑客sed删除功能

增加cai
  • c:replace替代这行的内容
  • a:append,向指定的行或每一行追加内容
  • i:insert,向指定的行或每一行插入内容

Linux三剑客sed增加功能

替换(重点)
替换格式:s###g,s///g,s@@@g
#、/、@任意特殊字符都可以都表示同一个意义,一般表示使用#、/,支持正则表达式
s:替换功能的表示
g:global,全局替换,sed默认只替换每一行匹配的内容,不加g只会进行匹配

Linux三剑客sed替换功能

sed的后向引用

Linux三剑客sed的后向引用

awk

awk是一门语言,是一个比sed更加强大的文本数据处理工具,awk取自于3位大师的首字母即:Aho、Weinggerger、Kernighan;主要用于过滤统计日志和计算

Linux三剑客awk简介

awk执行流程

在这里插入图片描述

awk执行案例分析

Linux三剑客awk执行案例

  1. 在awk读取文件emp1.txt之前执行BEGIN{}中的print “Test action start”
  2. 然后awk读取文件时,判断文件读取行数是否满足条件NR==3(即行号为3),满足该条件则执行对应的工作print $2,打印该行数对应的第二列值为England
  3. 读取文件之后,执行END{}中的print “end of file”

awk的内置变量

内置变量
NRNumber of Record 记录号,行号
NFNumber of field 每行有多少字段,$NF表示最后列
FSField Separator 字段分隔符,每个字段结束标记
OFSOutput Field Separator 输出字段分隔符,awk显示每一列之间的分隔符

awk行与列

行与列在awk中说明补充说明
记录record每一行默认通过回车分割
字段、域、field每一列默认是通过空格分割的

awk中的行与列的结束标志及分割标识是可以修改的

取行
awk表达式意义
NR==1取出某一行
NR>=1&&NR<=5取出1-5行范围
/word/找到特定word
/n1/,/n2/找到指定范围
Linux三剑客awk取行
取列

awk参数-F,标识指定分隔符,即指定每一列结束符标记(默认为空格、连续的空格、tab制表符)

数 字 : 标 识 取 出 该 对 应 的 数 字 列 , 与 数字:标识取出该对应的数字列,与 内容是一个意思,数字为0时为整行的内容

Linux三剑客awk取列2

awk模式匹配
awk-F,‘NR==3{print $2}’
命令选项‘模式,条件(动作)’

模式、条件可以分为:比较、正则、范围表达式、特殊条件(BEGIN、END)

比较

比较符号:>、<、>=、<=、==、!=

正则
  • //:支持扩展正则
  • awk可以精准到某一列,某一列中可以包含或不包含某个条件的内容
  • ~:包含
  • !~:不包含
一般正则awk正则
^:表示以某个开头的行某一列的开头
$:表示以某个结尾的行某一列的结尾
^$:表示空行某一列为空

Linux三剑客awk模式正则

表示范围
  • /开始 /,/结束/,常用的用法
  • NR == 1,NR==最后一行
Linux三剑客awk表示范围
特殊模式
  • BEGIN:在awk读取文件前打印信息
  • END:在awk读取文件之后打印信息

awk数组

awk数组主要用于统计日志、统计次数、累计求和

  • 统计日志
  • 统计次数:如统计每个ip出现次数、每种状态码出现的次数
  • 累计求和:每个ip消耗的流量
awk数组
形式array[0]=“hello” array[1]=“dance”
使用print array[0] array[1]
批量输出数组内容for(i in arrayname)
print arrayname[i]
awk数组专属循环,i获取的是数组的下标,数组内容为arrayname[i]
if判断if(条件)
print “some”
else
print “something else”

awk字母会被识别成变量,如果使用字符串需要加上双引号

Linux三剑客awk字母识别成变量

awk批量输出数组内容

Linux三剑客awk数组循环

总结

grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子;sed采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据;wk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理

赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值