grep
选项 | 说明 |
---|---|
-c | 只打印匹配的文本的行数,不显示匹配的内容 |
-i | 匹配时忽略字符的大小写 |
-h | 当搜索多个文件时,不显示匹配文件名前缀 |
-l | 只列出含有匹配的文本行的文件的文件名,而不显示具体的匹配的内容 |
-n | 列出所有的匹配的文本行,并显示行号 |
-s | 不显示关于不存在或者无法读取文件的错误信息 |
-v | 只显示不匹配的文本行 |
-w | 匹配整个单词 |
-x | 匹配整个文本行 |
-r | 递归搜索,不仅搜索当前目录,还要搜索其各级子目录 |
-q | 禁止输出任何匹配结果,而是以退出状态码的形式表示搜索是否成功,其中0表示找到了匹配的文本行 |
-b | 打印匹配的文本行到文件头的偏移量,以字节为单位 |
-E | 支持扩展正则表达式 |
-P | 支持Perl正则表达式 |
-F | 不支持正则表达式,将模式按字面意义匹配 |
查找不存在某个关键词的文件
搜索trc文件中不存在error关键词的文件
grep -L error *.trc
通过xargs将文件复制到指定目录
grep -L error *.trc|xargs -i cp {} /20220624/
sed
sed命令的基本语法如下:
sed [options] [script] [inputfile…]
在上面的语法中,options代表sed命令的选项,常用的选项如下所列。
选项 | 说明 |
---|---|
-n | 取消默认输出。 |
-e | 允许执行多个脚本。 |
-f | 从脚本文件中读取命令。 |
-i | 直接修改原始文件。 |
-l | 指定行的长度。 |
-r | 在脚本中使用扩展正则表达式。 |
-s | 默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。 而GNU sed则允许把它们当做单独的文件,这样的话,正则表达式不进行跨文件匹配。 |
-u | 最低限度的缓存输入与输出。 |
示例
截取两个关键字符之间的数据,下面截取的是clickhouse中4月19日凌晨3点到4点的日志
sed -n '/2022.04.19 03:00/,/2022.04.19 05:00/p' clickhouse-server.log > clickhouse-server.log.20220419.log
awk
- awk入门:主要介绍awk的功能、工作方式、基本语法,以及工作流程等。
- awk的模式匹配:主要介绍awk命令中的匹配模式,包括BEGIN模式、END模式、关系表达式、正则表达式,以及混合模式等。
- 变量:主要介绍awk程序中的变量的定义方法、常用的系统变量,以及使用系统变量获取记录和字段的值。
- 运算符和表达式:主要介绍各种运算符,包括算术运算符、赋值运算符、条件运算符、逻辑运算符,以及关系运算符等。
- 函数:主要介绍awk内置的常用字符串函数和算术函数。
- 数组:主要介绍数组的定义和引用方法,以及数组的遍历等。
- 流程控制:主要介绍awk中的if、while、do…while、break、continue、next,以及exit等流程控制语句的使用方法。
- awk程序的格式化输出:主要介绍awk程序中的输出语句,包括print及printf等。
- awk的程序与Shell的交互:主要介绍通过管道和system函数实现awk程序与Shell的交互。
awk命令的匹配模式非常灵活,可以是以下任意一种。
- 正则表达式:需要使用斜线将正则表达式包围起来。
- 关系表达式:例如x>34,判断变量x与34是否存在大于的关系。
- 模式1,模式2:指定一个行的范围。该语法不能包括BEGIN和END模式。
- BEGIN:让用户指定在第1行文本被处理之前所发生的操作,通常可在这里设置全局变量。
- END:让用户在最后1行文本被读取之后发生的操作。
awk命令的操作由一个或者多个命令、函数或者表达式组成,它们之间由换行符或者分号隔开,并且位于大括号内。通常情况下,有以下4种操作:
- 变量或者数组赋值。
- 输出命令,例如printf或者print。
- 内置函数。
- 流程控制语句,例如if、while或者for等。
awk的工作流程
对于初学者来说,搞清楚awk的工作流程非常重要。只有在掌握了awk的工作流程之后,才有可能用awk来处理数据。在awk处理数据时,它会反复执行以下4个步骤:
- 自动从指定的数据文件中读取行文本。
- 自动更新awk的内置系统变量的值,例如列数变量NF、行数变量NR、行变量$0,以及各个列变量$1、$2等。
- 依次执行程序中所有的匹配模式及其操作。
- 当执行完程序中所有的匹配模式及其操作之后,如果数据文件中仍然有末读取的数据行,则返回到第1步,重复执行1~4的操作。