用 awk + grep + sed 搞定日志处理神器组合拳
今天分享一下三剑客:grep,sed,awk。
一、Linux三剑客简介
Linux三剑客指的是grep、sed和awk这三个强大的文本处理工具。
grep偏向于文本搜索,sed专注于文本编辑操作,awk则提供更精细的过滤处理功能。
它们各自具有独特的功能和优势,能够满足不同的文本处理需求。掌握这些工具的使用,可以极大提高工作和学习的效率。
二、grep:搜索之剑详解
1. grep简介grep 是一个强大的命令行工具,用于在文本文件中搜索指定的模式。它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。
需要注意的是,grep会将匹配到的整行输出,而awk可以指定某一行某一列进行输出。
主要应用场景有:日志分析和文本处理,grep可以从日志文件中找出错误信息或特定事件,也用于从大量文本文件中提取特定信息
2. 工作原理grep进行文本搜索时主要进行以下三步:
输入处理:grep 从指定的文件或标准输入中逐行读取数据,检查每行是否与用户提供的模式匹配。模式匹配:grep 采用正则表达式进行模式匹配,根据规则检查每一行是否符合条件。输出结果:当某行匹配成功时,grep 会将该行输出3. 语法和可选项(1) 基本语法
(2) 可选项参数
选项
描述
-E
使用扩展正则表达式,grep -E 等同于egrep
-i
忽略大小写
-r
递归搜索某个目录下所有文件
-v
反向匹配,输出不匹配的行
-n
显示行号
-c
显示匹配行的总数,而不是打印匹配行。
-A n
输出匹配的后n行
-B n
输出匹配的前n行
-C n
打印匹配前后的n行
-L
列出未包含匹配项的文件名
-o
只显示匹配到的字符串本身,而不是整个行
-w
精确匹配整词,防止匹配到包含该单词的部分词汇
4. 实战操作(1)-i选项:忽略大小写
(2)-r选项:递归查询
(3)-E选项:支持扩展正则表达式 (4)-v选项:反向匹配
(4)-n选项:显示行号
(5)-l选项:查找文件名
(6)-A选项:查找后面几个字符
(7)-B选线:查找前面几个字符
(8)-C选择:查找前后几个字符
三、sed:编辑之剑详解
1. sed简介sed是编辑之剑:一个流编辑器,它允许用户在文件中进行文本替换、删除、添加等操作。sed支持基础和扩展的正则表达式,并提供了丰富的文本处理功能,如替换命令、地址定界等。sed的强大之处在于它可以非交互式地编辑文件或标准输入,使其成为自动化文本处理的理想选择。
应用场景有:批量替换,文本处理,通过sed命令可以快速替换文件中的特定字符串,如配置文件的修改;在shell脚本中结合其他命令如grep、awk等,实现复杂的文本处理任务
2. 工作原理sed的工作流程包括读取、执行和显示三个主要过程。
它会从输入流中读取一行内容并存储到临时缓冲区(模式空间),然后根据设定的命令在模式空间中执行编辑操作,最后将处理后的内容输出到标准输出
3. 语法、选项和动作介绍(1)基本语法
(2)常用选项
选项
描述
-n
只打印匹配处理的行,不修改文件
-e
允许多个编辑命令同时执行
-f
从脚本文件中读取并执行sed命令
-i
直接修改文件内容
-r
支持扩展正则表达式
(3)常用动作
动作
描述
p
打印模式空间的内容
a
在当前行后追加内容
i
在当前行前插入内容
c
用新文本替换模式空间中的内容
d
删除模式空间中的内容
s
替换内容
4. 实战操作sed可以做增删改查操作,接下来分别演示。
复制/etc/passwd文件到/opt下,以/opt/passwd来做测试操作
(1)增加操作
主要有两个动作指令:a是追加内容到指定行后面,i是插入内容到指定行前面
(2)删除操作
(3)更改操作
s是用于替换操作的,日常中最为常用,配合g使用,可以替换全部匹配到的内容
(4)查找操作
四、awk:过滤之剑
1. awk简介awk是一个编程语言工具,主要用于处理数据和生成报告。它能够按行和列分析文本文件,并对符合条件的数据执行操作,数据可以来自标准输入也可以是管道或文件。awk特别适合于处理结构化的文本数据,如日志文件、CSV文件等
2. 工作原理awk的工作原理可以分为三个主要部分:BEGIN块、主循环体和END块。
BEGIN块中的代码在处理任何输入行之前执行,且只执行一次。它通常用于初始化变量或打印表头信息;
主循环体是awk的核心部分,逐行读取输入文件并对每行进行处理。它会按指定的分隔符(默认为空格或制表符)将每行分割成字段,并存入内建变量中;
END块中的代码在所有输入行处理完毕后执行,且只执行一次。常用于输出最终结果或总结信息
注意:在使用awk时不一定要每个部分都出现,根据实际处理需求来使用哪个部分。
具体的工作流程分为以下三步:
读(Read):从文件、管道或标准输入中读入一行然后把它存放到内存中执行(Execute):对每一行数据,根据 AWK 命令按顺序执行。默认情况是处理每一行数据,也可以指定模式重复(Repeat):一直重复上述两个过程直到文件结束3. 语法参数(1)基础语法 awk指令是由模式,动作,或者模式和动作的组合组成。
(2)可选项
选项
描述
-F <分隔符>
用于指定输入字段的分隔符,默认是空格,可以使用逗号,冒号等
-v <变量名>=<值>
用于定义一个变量并赋值
-f <脚本文件>
用于从指定的脚本文件中读取awk命令,适用于awk指令较复杂场景
-r <扩展正则表达式>
用于启用扩展正则表达式模式匹配功能
-s
用于禁用自动换行功能,使得awk在输出时不会自动换行
-c <命令>
用于执行单个awk命令而不是从文件读取
(3)内置变量
变量
描述
NF
表示当前记录的字段数量
NR
表示已读的记录数(即行号)
FS
表示输入字段分隔符,默认为空格或制表符
OFS
表示输出字段分隔符
RS
表示输入记录分隔符,默认为换行符
$0
当前处理的行的整行内容
$n
当前处理行的第n个字段(第n列)
4. 实战操作awk操作也是用/opt/passwd文件演示
(1)输出全文内容并附带行号
(2)只打印第五行
(3)以: 为分隔符,打印第一列
(4)以: 为分隔符,打印第2列和最后一列
(5)打印以:和/ 为分隔符且包含root的行的列数
(6)打印以:为分隔符包含root的行数和整行内容
(7)格式化定制
生产环境BEGIN和END部分并不怎么常用,就不展开举例了
五、总结
Linux三剑客是任何Linux用户或系统管理员必须掌握的工具。无论是简单的文本搜索、数据提取还是复杂的文本处理任务,这些工具都能提供强大的支持。