Linux sed命令

目录

  • 一. 去除单个指定文本的换行符
  • 二. 去除多个指定文本的换行符
  • 三. 抽取出指定数据
    • 3.1 分别抽取SPLREQUEST和SPLEND的数据
    • 3.2 通过join命令将文件合并
    • 3.3 抽取出指定的数据
    • 3.4 去除换行符,整合数据为一行


一. 去除单个指定文本的换行符

👉 info.txt

Some text before
2023 Some text after
Another 2023 line with 2023
20232023A line with consecutive 2023
Last line 2023

⏹解析

  • :loop; N; $!b loop;用于循环整个文件
  • s/\n2023/ 2023/g用于替换,将换行符2023 替换为 空格2023
cat info.txt | sed ':loop; N; $!b loop; s/\n2023/ 2023/g'

💪效果

Some text before 2023 Some text after
Another 2023 line with 2023 20232023A line with consecutive 2023
Last line 2023

二. 去除多个指定文本的换行符

👉 a.txt

Start 2023-11-05 05:15:10
eventController=enent1
MemberId=uuidw3e
ExecTime=1000
Start 2023-11-05 05:17:10
eventController=enent2
MemberId=uuidA234
ExecTime=2000

⏹解析

  • s/\n\([eME]\)/ \1/g用于将 换行符e开头的数据,换行符M开头,换行符E开头的数据的换行符去掉,并添加一个空格。
cat ./a.txt | sed ':loop; N; $!b loop; s/\n\([eME]\)/ \1/g'

💪效果

Start 2023-11-05 05:15:10 eventController=enent1 MemberId=uuidw3e ExecTime=1000
Start 2023-11-05 05:17:10 eventController=enent2 MemberId=uuidA234 ExecTime=2000

三. 抽取出指定数据

如下所示,程序运行后生成了如下log

  • 开头的数字(110120,123456等)代表了线程号
  • SPLREQUEST表示请求的开始,SPLEND表示请求的终了。同一个请求的SPLREQUEST和SPLEND的线程号相同。
  • 因为系统上线运行后,同一时刻可能会存在多个并发请求,所以同一个请求在同一个时刻打印的log可能分布在日志文件的不同的地方。
  • 我们可以根据线程号将同一个请求的SPLREQUEST和SPLEND相关的数据聚合到同一行,然后进行处理。

👉 20231126-2.log

110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID=  eventController=event4123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6674545 SPLEND ExecTime=400 ResultCode=200

3.1 分别抽取SPLREQUEST和SPLEND的数据

  • 在日志文件中,请求开始的日志和请求结束的日志所在的位置都是错乱无规律的。
  • 我们可以先将请求开始相关的数据抽取到一个文件中
  • 再将请求终了的相关的数据抽取到一个文件中
  • 再将上述得到的两个文件合并

⏹将SPLREQUEST相关的数据抽取到文件中

grep SPLREQUEST ./20231126-2.log > SPLREQUEST.txt

SPLREQUEST.txt

110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1 
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2 
123444 SPLREQUEST 内容3 CCC memberID=3 eventController= 
123434 SPLREQUEST 内容4 DDD memberID=  eventController=event4 
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5 
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6 

⏹将SPLEND相关的数据抽取到文件中

grep SPLEND ./20231126-2.log > SPLEND.txt

SPLEND.txt

110120 SPLEND ExecTime=200 ResultCode=200 
123456 SPLEND ExecTime=300 ResultCode=200 
123444 SPLEND ExecTime=200 ResultCode=200 
123434 SPLEND ExecTime=400 ResultCode=200 
345345 SPLEND ExecTime=500 ResultCode=200 
674545 SPLEND ExecTime=400 ResultCode=200

3.2 通过join命令将文件合并

⏹由于请求开始和请求终了日志的线程号都是相同的,且都在第一列,因此可以通过join命令将两个文件通过线程号连接起来

join SPLREQUEST.txt SPLEND.txt > ALL.txt

ALL.txt

110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1  SPLEND ExecTime=200 ResultCode=200
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2  SPLEND ExecTime=300 ResultCode=200
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=  SPLEND ExecTime=200 ResultCode=200
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4  SPLEND ExecTime=400 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5  SPLEND ExecTime=500 ResultCode=200
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6  SPLEND ExecTime=400 ResultCode=200

3.3 抽取出指定的数据

⏹抽取出线程号,memberID,eventController,ExecTime。

  • -o表示 只显示匹配到的数据
  • ^\S*表示 非空开头的数据,在此案例中特指线程号
grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" ALL.txt > pick_data.txt

pick_data.txt

110120
memberID=1
eventController=event1
ExecTime=200
123456
memberID=2
eventController=event2
ExecTime=300
123444
memberID=3
eventController=
ExecTime=200
123434
memberID=
eventController=event4
ExecTime=400
345345
memberID=5
eventController=event5
ExecTime=500
674545
memberID=6
eventController=event6
ExecTime=400

3.4 去除换行符,整合数据为一行

cat pick_data.txt | sed ':loop; N; $!b loop; s/\n\([emE]\)/ \1/g'
110120 memberID=1 eventController=event1 ExecTime=200
123456 memberID=2 eventController=event2 ExecTime=300
123444 memberID=3 eventController= ExecTime=200
123434 memberID= eventController=event4 ExecTime=400
345345 memberID=5 eventController=event5 ExecTime=500
674545 memberID=6 eventController=event6 ExecTime=400

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS新手入门笔记整理:CSS字体样式

字体类型:font-family 语法 font-family:字体1,字体2,...,字体n; font-family可以指定多种字体。使用多个字体时,将按从左到右的顺序排列,并且以英文逗号(,)隔开。如果我们不定义font-family&#xff0c…

Apache Airflow (十四) :Airflow分布式集群搭建及测试

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

虚拟化场景时间管理

在云主机环境涉及到时间处理,虚拟机vmexit,内部时间中断模拟处理,电路板通常有一些定时操作设备,hyperson里如何实现,怎么保证时间可靠? 代码:qemu-5.0 1、qemu时钟(time.h&#xff…

【C++】探索C++模板编程

文章目录 什么是C模板?模板的基本语法类型模板参数模板函数的示例类模板的示例总结 C模板是一种强大的编程工具,它可以实现泛型编程,使代码更加灵活和可重用。本篇博客将介绍C模板的基本语法、类型模板参数和模板函数的使用,并通过…

MaaS/PaaS/SaaS

生成式AI时代的AI Infra—从DevOps->MLOps->LLMOps - 知乎距离上次讲LLM相关的内容已经过去2个月了 LLM as Controller—无限拓展LLM的能力边界,本文想要从AI Infra的角度出发,从更宏观的角度看Generative AI对AI Infra生态产生的变化,…

Web前端开发技术:图像与多媒体文件

在现代的Web开发中,图像和多媒体文件在各种网站和应用程序中扮演着至关重要的角色。它们不仅能提供更丰富的内容,还能大大提高应用程序的吸引力和用户体验。本文将深入介绍一些关键的Web前端开发技术,这些技术将有助于开发者在处理图像和多媒…

前馈式神经网络与反馈式神经网络的区别,联系,各自的应用范围和场景!!!

文章目录 前言一、前馈式神经网络是什么?二、前馈式神经网络包括:三、反馈式神经网络是什么?四、反馈式神经网络包括:总结 前言 前馈式神经网络和反馈式神经网络是两种主要的神经网络架构,它们在网络结构和应用场景上…

Python---引用变量与可变、非可变类型

引用变量 在大多数编程语言中,值的传递通常可以分为两种形式“ 值 传递 与 引用 传递”,但是在Python中变量的传递基本上都是引用传递。 变量在内存底层的存储形式 a 10 第一步:首先在计算机内存中创建一个数值10(占用一块…

玩转微服务-技术篇-JSDOC教程

一. 简介 JSDoc 3 是一个用于 JavaScript 的API文档生成器,类似于 Javadoc 或 phpDocumentor。可以将文档注释直接添加到源代码中。JSDoc 工具将扫描您的源代码并为您生成一个 HTML 文档网站。 JSDoc 是一种用于 JavaScript 代码文档注释的标记语言和工具。它不仅…

【Leetcode】907. 子数组的最小值之和

给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 10^9 7 。 示例 1: 输入:arr [3,1,2,4] 输出:17 解释&…

类 —— 封装、四类特殊成员函数、this指针、匿名对象、深浅拷贝问题

类 将同一类对象的所有属性都封装起来。 类中最基础的内容包括两部分,一个是属性、一个是行为。 ● 属性:表示一些特征项的数值,比如说:身高、体重、性别、肤色。这些属性都是名词。属性一般都以名词存在。属性的数值&#xff0c…

Kubernetes之kubeadm集群优化篇—harbor添加更新SSL证书

docker 从docker 仓库中推送或获取镜像都是默认走https协议的。需要配置ssl证书,否则将无法方面,为了解决这以问题,我们有2个方案: 修改docker配置文件,关闭证书 “insecure-registries”。关闭证书校验 配置ssl证书&a…

前端实现留言板

留言板的主要使用场景是为用户提供一个在网站或应用上留言的平台,这样他们可以分享自己的想法、意见或建议。这些留言可以帮助开发者收集用户反馈,从而改进产品或服务。 使用HTML、CSS和JavaScript实现的留言板:这种方法的优点是简单易实现&a…

算法基础之食物链

食物链 核心思想&#xff1a;带权并查集 用距根节点和距离表示与根节点的关系 求距离 #include<iostream>using namespace std;const int N50010;int n,m;int p[N],d[N];//找到祖宗节点(路径压缩) 并求出对应距离int find(int x){if(p[x]!x){int up[x]; //保存旧父节点…

如何使用 Java 在Excel中创建下拉列表

下拉列表&#xff08;下拉框&#xff09;可以确保用户仅从预先给定的选项中进行选择&#xff0c;这样不仅能减少数据输入错误&#xff0c;还能节省时间提高效率。在MS Excel中&#xff0c;我们可以通过 “数据验证” 提供的选项来创建下拉列表&#xff0c;但如果要在Java程序中…

mysql账户密码获取

数据库安装目录 MySQL\data\mysql 里面的user.MYD文件&#xff0c;需要编译查看 数据库里的user表 库下面的user表拿到后&#xff0c;直接解密密码即可 网站配置文件 conn、config、data、sql、common 、inc这些文件 比如pikachu\inc目录下的config.inc.php文件的内容会显示…

uniapp的vue3的模版的setup函数内使用uniapp内置方法

vue2使用方式直接在method同级使用就行,但是在vue3的setup函数内直接使用会报错,本人找了好久,发现vue3需要导入uniapp模块才能使用,具体如下 使用uniapp上拉加载更多方法 <script>import {onReachBottom} from dcloudio/uni-apponReachBottom(() > {console.log(&qu…

速通CSAPP(一)计算机系统漫游入门

CSAPP学习 前言 一门经典的计组课程&#xff0c;我却到了大四才学。 anyway&#xff0c;何时都不会晚。 博主参考的教程&#xff1a;本电子书信息 - 深入理解计算机系统&#xff08;CSAPP&#xff09; (gitbook.io)&#xff0c;非常感谢作者的整理。 诚然去看英文版可以学…

【开源】基于Vue和SpringBoot的木马文件检测系统

项目编号&#xff1a; S 041 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S041&#xff0c;文末获取源码。} 项目编号&#xff1a;S041&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…

软著项目推荐 深度学习中文汉字识别

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…