news 2026/9/14 10:37:54

Linux grep案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux grep案例

目录

  • 一. 查询两个文件第一列的数据并去重
  • 二. 抽取日志中指定的字段
  • 三. 服务器指定时间点异常查询
  • 四. 从csv文件中抽取指定的数据
  • 五. 获取除了空白行和注释之外的部分

一. 查询两个文件第一列的数据并去重

📚file1.log

123 aaa 你好 345 bbb 我好 345 ccc 大家好 124 ddd 世界好 111 rrr 哈哈哈

📚file2.log

123 mmm 你好mmm 366 nnn 我好nnn 377 fff 大家好fff 124 uuu 世界好uuu 111 iii 哈哈哈iii

🤔分析
两个文本文件格式相同,都是3列,第一例都是数字编号。可以通过打开这两个文件然后获取出开头列,然后排序之后再去重。

🧐转换为linux命令之后就是

  • 通过cat命令同时打开两个文本文件
  • -o配置项只输出匹配到的内容
  • ^\S*匹配开头不为空的内容
  • sort用来排序
  • uniq用来去重
catfile1.log file2.log|egrep-o-a"^\S*"|sort|uniq
111 123 124 345 366 377

👉如果我们想查看每个数字编码出现的次数的话,给uniq命令加上-c配置项即可。
其中第一列是数字编码出现的次数。

catfile1.log file2.log|egrep-o-a"^\S*"|sort|uniq-c
2 111 1 123 2 124 2 345 1 366 1 377

二. 抽取日志中指定的字段

📚有如下日志file4.log

  • 日志分内容分为2类,SEQIN 和 SEQOUT
  • SEQIN 类中存在若干字段内容,isuuePayId,uuid,jmw_state,method等等
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp 2323 SEQOUT COST=45726 2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd 2345 SEQOUT COST=34855

🤪需求,抽取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段,让其在一行显示

⏹第一步,抽取SEQIN类日志,去除掉 SEQOUT 日志

grep-a"SEQIN"file4.log
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp 2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd

⏹第二步,获取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段

grep-a"SEQIN"file4.log|egrep-o-a-e"^\S*"-e"isuuePayId=\S*"-e"jmw_state=\S*"
2323 isuuePayId=5768awe jmw_state=success 2345 isuuePayId=34895ry jmw_state=faile

⏹第三步,让isuuePayId和jmw_state到一行上显示

grep-a"SEQIN"file4.log# 进一步过滤|egrep-o-a-e"^\S*"-e"isuuePayId=\S*"-e"jmw_state=\S*"# 替换指定字段的换行符|sed':loop; N; $!b loop; ;s/\n\([ij]\)/ \1/g'
2323 isuuePayId=5768awe jmw_state=success 2345 isuuePayId=34895ry jmw_state=faile

三. 服务器指定时间点异常查询

  • 需求:由于上午发生网络波动,导致部分业务发生了异常
    • 现在需要查询出网络波动时间点和异常的件数
    • 哪个服务器发生的异常
    • 具体发生了什么的异常

⏹查询发生的件数版本1

  • 以ERROR 或 Exception 为关键词进行检索
  • c1A03a,c1Ae*a,c1Be*a都是服务器的名称
  • 同一个请求可能会发生多个异常,因此这种查询方式得到的件数可能会存在重复
grep-ae"\[ERROR\]"-ae"Exception"/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|wc-l

⏹查询发生的件数版本2

grep-ae"\[ERROR\]"-ae"Exception"/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|grep-a09:0[5-9]:[0-5][0-9]|egrep-o"^\S*"|sort|uniq-c|wc-l

⏹查询发生异常的服务器名称

  • 根据时间点缩小范围
  • 查询开头不为空的部分(含有日志路径和线程号部分)
  • 排序之后去重
  • 之所以会用awk '{print $1}'是因为排序之后去重之后,获取到的内容之前会加上一个数字,用来表示当前行的重复数量
  • 若仅排序去重,不使用awk '{print $1}'处理,数据的大致样式如下
    1/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-477895/logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-243893/logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267
  • 将查询结果放入result.log文件中
grep-ae"\[ERROR\]"-ae"Exception"/logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/ spl/.20240331*mpl*app.log|grep-a09:0[5-9]:[0-5][0-9]|egrep-o"^\S*"|sort|uniq-c|awk'{print $1}'>result.log

⏹result.log的内容如下

  • :的部分是日志所在的路径,从路径中可以找出服务器的名称
  • :的部分是请求的线程号,通过该线程号可以详细的抽出日志
/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-47789 /logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389 /logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267

四. 从csv文件中抽取指定的数据

sftp_data.csv

AAA,222,333,20240604,20 AAA,222,333,20240604,10 BBB,444PPP,555SS,20240605,20 BBB,444,555SS,20240610,20 CCC,555,666SS,20240605,10 CCC,666,666SS,20240603,20

🤔需要从上面的csv文件中抽取

  • 第四列的从20240601~20240605的数据
  • 第五列为20的数据

grep "^.*,.*,.*,2024060[1-5],20" sftp_data.csv

  • 前3列为任意值
  • 后两列指定正则表达式和具体的值
fengyehong@ubuntu:~/jmw_work_space/20270720$grep"^.*,.*,.*,2024060[1-5],20"sftp_data.csv AAA,222,333,20240604,20 BBB,444PPP,555SS,20240605,20 CCC,666,666SS,20240603,20

五. 获取除了空白行和注释之外的部分

  • cat file3.txt | grep -v ^# | grep -v ^$

  • 下面这两种方式也可以实现相同的效果
grep-vP'^\s*(#|$)'/etc/squid/squid.confgrep-vE'^[[:space:]]*(#|$)'/etc/squid/squid.conf
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 10:35:37

法律文书智能检索:向量检索与交叉编码器技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 10:34:35

Pot 划词翻译完整安装指南:免费跑通三平台悬浮翻译

Pot 划词翻译完整安装指南:免费跑通三平台悬浮翻译 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trending/po/pot-deskt…

作者头像 李华
网站建设 2026/9/14 10:33:03

程序员转型大模型开发:机遇、挑战与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 10:30:08

LTX-2视频创作系统:结构化Prompt与4K工作流优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 10:29:38

创业验证不是选择题,而是最小可证伪动作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华