Linux 文本处理三剑客
1|0一、grep:文本过滤工具
grep 语法格式:
参数选项 | 解释说明 |
---|---|
-v | 显示不匹配的行,或者说排除某些行,显示不包含匹配文本的所有行 |
-n | 显示匹配行及行号 |
-i | 不区分大小写(只适用于单字符),默认是区分大小写的 |
-c | 只统计匹配的行数,注意不是匹配的次数 |
-E | 使用扩展的 egrep 命令 |
--color=auto | 为 grep 过滤的匹配字符串添加颜色 |
-w | 只匹配过滤的单词,单词的两边必须是非字符符号(即不能是字母数字或下划线) |
-o | 只输出匹配的内容 |
有文本如下(test.txt)
1|11.1 -v 参数实践
提示:
grep 的 -v 参数的作用是排除,默认是以行为单位排除包含参数后面所接内容的某些行
1|21.2 -n 参数实践
提示:
-n 参数会对 grep 命令找到的内容在开头加上对应的行号
1|31.3 -i 不区分大小写参数实践
1|41.4 -E 和 --color 的参数实践
1|51.5 -c 参数实践
1|61.6 -o 参数实践
1|71.7 -w 参数实践
1|81.8 grep 常用
2|0二、sed:字符流编辑器
语法格式
说明:
- sed以及后面的选项、命令和输入文件,每个元素之间都至少要有一个空格。
- 【sed内置命令字符】,既可以是单个命令,也可以是多个命令参数的组合
- 【输入文件】为sed 需要处理的文件,这是可选项,sed 还能够从标准输入如管道中获取输入
2|12.1 选项、内置命令说明
参数选项
参数选项 | 解释说明 |
---|---|
-n | 取消默认的sed的输出,常与sed内置命令的p连用 |
-i | 直接修改文件内容,而不是输出到终端。如果不使用 -i 选项,则sed只是修改内存中的数据,并不会影响磁盘上的文件 |
sed内置命令字符
sed的内置命令字符 | 解释说明 |
---|---|
a | 全拼 append,表示追加文本,在指定行后添加一行或多行文本 |
d | 全拼 delete,表示删除匹配行的文本 |
i | 全拼 insert,表示插入文本,在指定行前添加一行或多行文本 |
p | 全拼 print,表示打印匹配行的内容,通常 p 会与选项 -n 一起使用 |
s/regexp/replacement | 匹配 regexp 部分的内容,用 replacement 替换 regexp 匹配的内容,regexp部分可以使用正则表达式,在 replacement 部分可以使用特殊字符 & 和 \1-\9等匹配 regexp 部分的部分内容。在实战场景中,s/regexp/replacement/g 结尾常与g匹配做全局的替换 |
2|22.2 示例文本
先准备一个文本 tex.txt
2|32.3 在文本指定行后追加文本
2a 106,dandan,CSO
的意思:
- 2 表示对第 2 行进行操作,其他的行忽略
- a 表示追加,2a 即在第 2 行后追加文本
- 2a 后面加上空格,然后接着输入想要追加的文本内容(106,dandan,CSO`)即可
2|42.4 在文本指定的行前面插入文本
2i 106,dandan,CSO
的意思:
- 2 表示对第 2 行进行操作,其他的行可忽略
- i 代表插入的意思,2i 表示在第2行即当前行插入文本,即插入到第二行
- 2i 后面加上空格,然后跟上要插入的文本(106,dandan,CSO),最后接上要处理的文件 text.txt
2|52.5 在文件指定行后追加多行文本
2|62.6 删除文件中一行指定的文本
2|72.7 删除文件中指定的多行文本
2|82.8 使用sed命令替换文本内容
2|92.9 打印输出文件的指定行的内容
2|102.10 -i 选项
2|112.11 N 内置命令
有文件如下
现在要把格式变成
可用以下方法实现
3|0三、awk 基础入门
3|13.1 参数选项及说明
awk 命令的常用功能 | 简要例子说明 |
---|---|
指定分隔符显示某几列 | awk -F "GET|HTTP" '{print $2}' test.log 直接取出显示出日志文件的 url 这一列 |
通过正则表达式取出你想要的的内容 | awk '$6~/Failed/{print $11}' /var/log/secure 分析生产环境中的日志找出谁在破解用户的密码 |
显示出某个范围内的内容 | awk 'NR20,NR30' filename 显示文件的20到30行内容 |
通过awk进行统计计算 | awk '{sum+=$0}END{print sum}' ett.txt 计算总和 |
awk数组计算与去重 | awk '{array[$1]++}END{for(key in array)print key,array[key]}' access.log 对日志进行统计与计数 |
参数选项及说明
参数选项 | 解释说明 |
---|---|
-F | 指定字段分隔符 |
-v | 定义或修改一个 awk 内部的变量 |
3|23.2 示例文本
3|33.3 显示文件中的第5行
注意:awk后面所接的内容要用单引号
显示一部分行的内容,例如显示 2-6 行
3|43.4 用 awk 实现给文件每行的内容之前加上行号
这里的NR还是表示行号,$0 表示一整行的内容(一行的内容)。
3|53.5 显示第 2 行到 第 6 行,并打印行号
3|63.6 显示文件的第 1 列、第 3 列和最后一列
3|73.7 把文件中的 /sbin/nologin 替换为 /bin/bash
3|83.8 生产案例1:取出 eh0 网卡对应的ip地址
取出的方式
我们的目标是取得ip,本例是10.0.0.8,ip的左边是 addr:
,右边是 Bcast:
。所以两边都是分隔符,就可以取到我们想要取到的值。(这里需要注意-F 指定多分割符的写法
)
还有一个简单的方法
结合起来,-F "[ :]+"
就是以单个或连续的空格或冒号或者它们的组合为分隔符。最后就可以获得我们想要的ip地址。
3|93.9 面试题--统计域名访问次数
测试数据如下:
3.9.1 方案1
(1)取出每行中的域名
(2)排序(让相同的域名相邻)
(3)去重计数
3.9.2 方案2(awk数组方案)
(1)取出域名
(2)创建一个 awk 数组,然后把第二列(域名)作为数组的下标,再通过类似于 i++ 的形式来计算域名重复的次数
(3)开始统计
(4)输出最终结果
上面的命令详细地显示了 awk 统计的过程。如果想要获得最终结果该怎么办呢?通过END模式来输出最终结果。
awk数组提供了自己独有的方法来完成它——一个专用的循环:
__EOF__

本文作者:😎
本文链接:https://www.cnblogs.com/dongye95/p/14450235.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/dongye95/p/14450235.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!