Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)

0 前言
自 60 年代末以来,sed 一直是 Unix 标准工具箱的一部分。
Sed在以下三种情况下特别有用:
-
编辑太大的文件,无法进行舒适的交互式编辑;
-
当编辑命令序列过于复杂而无法在交互模式下轻松键入时,可以编辑任何大小的文件。
-
通过输入一次有效地执行多个“全局”编辑功能。
在
Linux shell编程学习笔记73:sed命令——沧海横流任我行(上)-CSDN博客
https://blog.csdn.net/Purpleendurer/article/details/141307421?spm=1001.2014.3001.5501
中我们研究了sed了基础知识,现在我们来通过一些实例来见识一下sed删除和替换功能的威力。
1 sed实列
1.1 删除指定行
删除操作使用d命令。
我通过sed对seq命令产生的序列来说明。
关于seq命令的功能和用法,可以参考:Linux shell编程学习笔记35:seq_linux shell seq-CSDN博客
https://blog.csdn.net/Purpleendurer/article/details/134938053
1.1.1 删除第3行
[purpleendurer @ bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer @ bash ~ ] seq 7 | sed 3d
1
2
4
5
6
7
[purpleendurer @ bash ~ ]

seq 7 命令执行的结果是产生7行数据,分别是1、2、3、4、5、6、7。
我们把 seq 7 命令执行的结果通过管道传送给命令sed 3d来处理,其中:
3:指定第3行。
d:指定执行删除操作。
于是我们看到处理的结果中,没有第3行。
1.1.2 删除3~5行
我们可以使用
起始行号,结束行号
来指定一个要处理的连续的行块。
要指定对第3行~第5行进行操作,我们可以通过 3,5 来指定。
[purpleendurer @ bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer @ bash ~ ] seq 7 | sed 3,5d
1
2
6
7
[purpleendurer @ bash ~ ]

于是我们看到处理的结果中,没有第3行~第5行。
1.1.3 删除奇数行
我们可以通过
起始行~步长
的格式来指定要处理的行。
对于奇数行,起步行为1,步长为2,所以我们可以使用 1~2 来指定奇数行。
[purpleendurer @ bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer @ bash ~ ] seq 7 | sed 1~2d
2
4
6
[purpleendurer @ bash ~ ]

1.1.4 删除第3行及其后3行
我们也可以可以通过
起始行,+行数
的格式来指定要处理的行,例如我人们要对第3行及其后3行进行处理,那么可以使用 3,+3 来指定。
[purpleendurer @ bash ~ ] seq 8
1
2
3
4
5
6
7
8
[purpleendurer @ bash ~ ] seq 8 | sed 3,+3d
1
2
7
8
[purpleendurer @ bash ~ ]

1.1.5 直接删除纯数字行
我们可以使用正则表达式来指定要处理的行,比如直接删除纯数字行。
[purpleendurer @ bash ~ ] cat t.txt
0
aaa
***
11
bbb
222
+++
222abc
[purpleendurer @ bash ~ ] sed '/^[0-9]*$/d' t.txt
aaa
***
bbb
+++
222abc
[purpleendurer @ bash ~ ]

我们先使用 cat t.txt 命令查看文件t.txt的内容,其第1、4、6行都是纯数字的。
然后我们使用 sed '/^[0-9]*$/d' t.txt 命令将文件t.txt中的纯数字行删除后再输出。
可以看到第1、4、6这由纯数字的3行均被删除了。
而最后一行即第8行,虽然开头是数字222,但后面还字母aaa,不是纯数字行,所以没有被删除。
对命令的第2部分 '/^[0-9]*$/d' 作个说明。:
- /^[0-9]*$/:^代表行开始,$代表行结束,二者之间 的 [0-9]* 代表数字,三者放在一起就代表纯数字行。
- d:代表删除命令
1.2 文本替换
替换操作使用d命令。
整行替换的格式一般为:
sed '[指定操作行]s 替换字符串/' [文件]
如果使用了正则表达式指定要替换的字符串,也就是要进行精准替换,可以用下面这种格式:
sed 's/原字符串/替换字符串/' [文件]
1.2.1 将第3行内容替换为abc
[purpleendurer @ bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer @ bash ~ ] seq 7 | sed '3c abc'
1
2
abc
4
5
6
7
[purpleendurer @ bash ~ ]

1.2.2 将偶数行替换为abc
对于奇数行,起步行为0,步长为2,所以我们可以使用 0~2 来指定偶数行。
[purpleendurer @ bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer @ bash ~ ] seq 7 | sed '0~2c abc'
1
abc
3
abc
5
abc
7
[purpleendurer @ bash ~ ]

1.2.3 将每行中的 数字 替换为 -
[purpleendurer @ bash ~ ] echo "0" > t.txt
[purpleendurer @ bash ~ ] echo "aaa" >> t.txt
[purpleendurer @ bash ~ ] echo "***" >> t.txt
[purpleendurer @ bash ~ ] echo "11" >> t.txt
[purpleendurer @ bash ~ ] echo "bbb" >> t.txt
[purpleendurer @ bash ~ ] echo "222" >> t.txt
[purpleendurer @ bash ~ ] echo "+++" >> t.txt
[purpleendurer @ bash ~ ] cat t.txt
0
aaa
***
11
bbb
222
+++
[purpleendurer @ bash ~ ] sed 's/[0-9]/-/g' t.txt
-
aaa
***
--
bbb
---
+++
[purpleendurer @ bash ~ ]

我们先使用echo命令和重定向创建测试文件.txt
然后用cat t.txt 命令查看文件t.txt的内容
最后我们使用 sed 's/[0-9]/-/g' t.txt 命令将文件t.txt中的每行中的 数字 替换为 -再输出。
对命令的第2部分 s/[0-9]*/-/g 作个说明。
- s:替换命令
- /[0-9]*/:正则表达式,代表数字0,1,2,3,4,5,6,7,8,9
- -:要替换的字符串
- /g:全局作用域
1.2.4 将数字替换为空,再删除空行
[purpleendurer @ bash ~ ] cat t.txt
0
aaa
***
11
bbb
222
+++
[purpleendurer @ bash ~ ] sed 's/[0-9]*//g' t.txtaaa
***bbb+++
[purpleendurer @ bash ~ ] sed -e 's/[0-9]*//g; /^$/d' t.txt
aaa
***
bbb
+++
[purpleendurer @ bash ~ ]

我们先使用 cat t.txt 命令查看文件t.txt的内容,其第1、4、6行都是纯数字的。
然后我们使用 sed 's/[0-9]*//g' t.txt 命令将文件t.txt中的每行中的 数字 替换为空再输出。
对命令的第2部分 s/[0-9]*//g 作个说明。
- s:替换命令
- /[0-9]*/:正则表达式,代表数字0,1,2,3,4,5,6,7,8,9
- /g:全局作用域
这里没有指定要替换的目标字符串,也就是替换为空。
最后我们使用 sed -e 's/[0-9]*//g; /^$/d' t.txt 命令将文件t.txt中的每行中的 数字 将数字替换为空,再删除空行。
对命令的第3部分 's/[0-9]*//g; /^$/d' 作个说明。
这个部分由分号分为前后两个命令。
前一个命令 s/[0-9]*//g 在上面已经说明。
后一个命令 /^$/d 包括两个部分:
- /^$/:^代表行开始,$代表行结束,两个符号放在一起,中间没有其他这字符,就代表空行
- d:代表删除命令
1.2.5 将每行第3次出现的2替换为5
[purpleendurer @ bash ~ ] cat -n t.txt1 02 aaa3 ***4 115 bbb6 2227 +++8 222abc
[purpleendurer @ bash ~ ] cat -n t.txt | sed 's/2/5/3' 1 02 aaa3 ***4 115 bbb6 2257 +++8 225abc
[purpleendurer @ bash ~ ]

我们先使用 cat t.txt 命令查看文件t.txt的内容,其第6、8行都包括3个2。
然后我们使用 cat -n t.txt | sed 's/2/5/3' 命令将文件t.txt中每行第3次出现的2替换为5后再输出。
可以看到第6、8行中的第3个2被替换为5了。
对sed命令后面的 's/2/5/3' 作个说明。:
- s:替换命令
- /2/5/3:其中2是被替换的原字符串,5是被替换的目标字符串,3代表第3次出现。
1.2.6 将每行中第2次出现的a替换为A
[purpleendurer @ bash ~ ] cat -n t.txt1 02 aaa3 ***4 115 bbb6 2227 +++8 222abc
[purpleendurer @ bash ~ ] cat -n t.txt | sed -e 's/a/A/2'1 02 aAa3 ***4 115 bbb6 2227 +++8 222abc
[purpleendurer @ bash ~ ]

我们先使用 cat t.txt 命令查看文件t.txt的内容,其中第2行中有3个a。
然后我们使用 cat -n t.txt | sed 's/2/5/3' 命令将文件t.txt中每行中的第2次出现的a替换为A再输出。
可以看到第2行中的第2个a被替换为A了。
相关文章:
Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)
0 前言 自 60 年代末以来,sed 一直是 Unix 标准工具箱的一部分。 Sed在以下三种情况下特别有用: 编辑太大的文件,无法进行舒适的交互式编辑; 当编辑命令序列过于复杂而无法在交互模式下轻松键入时,可以编辑任何大小的…...
[数据集][目标检测]道路积水检测数据集VOC+YOLO格式2699张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2699 标注数量(xml文件个数):2699 标注数量(txt文件个数):2699 标注…...
不同路径
不同路径 思路: 法一:动态规划 const int N 110; class Solution { int dp[N][N];//dp[i][j]:从起点走到 i j的路径个数。 public:int uniquePaths(int m, int n) {for(int i1;i<n;i){dp[1][i]1;} for(int i1;i<m;i) dp[i][1]1;f…...
【HTML】HTML学习之引入CSS样式表
1、CSS样式规则 选择器{属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}2、HTML引入CSS样式表 2.1、行内式 行内式也称为内联样式,是通过标签的style属性来设置元素的样式,其基本语法格式如下: <标签名 style"属性1:属性值1; 属性2:属性值2;…...
shaushaushau1
CVE-2023-7130 靶标介绍: College Notes Gallery 2.0 允许通过“/notes/login.php”中的参数‘user’进行 SQL 注入。利用这个问题可能会使攻击者有机会破坏应用程序,访问或修改数据. 已经告诉你在哪里存在sql注入了,一般上来应该先目录扫…...
揭秘面试必备:高频算法与面试题全面解析
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
设计模式-visit模式-在语法树的实践
文章目录 背景示例代码分析灵活性双重分派 总结 背景 很多项目代码有accept()用法,在calcite 里也看到了这种,深入了解一下 语法树遍历:编译器通常会将源代码解析成抽象语法树(AST)。为了实现不同的编译阶段ÿ…...
ZK-Rollups测评
1. 引言 Matter Labs团队和多个高校研究人员一起,发布2024年论文《Analyzing and Benchmarking ZK-Rollups》,开源代码见: https://github.com/StefanosChaliasos/zkrollup-benchmarking(Python) 其中: …...
redis生产使用场景(一):并行流+二级缓存
本文主要介绍 redis 缓存在线上的使用场景 由于业务的特殊性,在生产库用户表中,大概有 50 多万的测试用户,在真实业务计算中,要把测试用户给筛选掉,所以在计算前,需要把测试用户加载到 redis 缓存中&#x…...
EXCEL跨文件查询,指定条件列,返回满足条件的指定列
EXCEL跨文件查询,指定条件列,返回满足条件的指定列 Private Sub cmd_find_from_workbooks_Click() Dim S_Cols As String, thePath As String, Sor_Col As Integer, sz_Cols As Variant S_Cols T_jieguo_cols.Text sz_Cols Split(S_Cols, ",&quo…...
[数据集][目标检测]流水线物件检测数据集VOC+YOLO格式9255张26类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):9255 标注数量(xml文件个数):9255 标注数量(txt文件个数):9255 标注…...
StarRocks 存算分离 Compaction 原理
前言 StarRocks 中每次数据摄入都会生成一个新的数据版本,而查询时需要将所有版本数据进行合并才能获得一个正确的结果,如果历史数据版本太多,那么查询时需要读取的文件数也会很多,造成查询效率低下。因而 StarRocks 存在内部任务…...
搭建ELK日志采集与分析系统
SpringCloud微服务实战——企业级开发框架 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您…...
java集合中自动排序的treeset和treemap
底层 TreeSet 和 TreeMap 的底层架构都是基于红黑树实现的。红黑树是一种自平衡的二叉搜索树,其特性保证了插入、删除和查找操作的时间复杂度为 (O( log n \log n logn)),无论数据量多大,操作性能都能保持在合理的范围内。 1. 红黑树概述 红黑树是一种平衡二叉搜索树(…...
Android 修改SystemUI 音量条的声音进度条样式
一、前言 Android System UI 开发经常会遇到修改音量进度条样式的需求,主要涉及的类有VolumeDialogImpl与xml文件,接下来会逐步实现流程。先看看效果。 修改前 修改后 二、找到对应类 通过aidegen 打断点调试对应代码类VolumeDialogImpl定位到volume_d…...
电商场景的视频生成的prompt测评集合
1.收集的一些提示词 一台写着Vidu的赛车在路上飞驰,赛车上面坐着一只乌龟 一个宇航员在太空中骑单车 两个巨大的机器人在打架,电影风格,史诗感,高细节 在科幻电影风格中,两个巨大的机器人在城市废墟中激烈战斗。使用高角度俯拍,展现机器人的宏伟和战斗的史诗感。机器人…...
day34
1 非阻塞型IO 让我们的read函数不再阻塞,无论是否读取到消息,立刻返回 1.1 fcntl函数 原型:int fcntl(int fd, int cmd, ... /* arg */ ); 调用:int flag fcntl(描述符,F_GETFL) fcntl(描述符,F_SETFL&am…...
无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案
无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案 大语言模型的训练数据一般基于公开的数据,且每一次训练需要消耗大量算力,这意味着模型的知识一般不会包含私有领域的知识,同时在公开知识领域存在一定的滞后性。为了解决这一…...
AWS服务WAF
在 AWS 中使用 Web Application Firewall (WAF) 来防御常见的攻击手段,如 DDoS 攻击和 SQL 注入攻击,可以通过创建和配置规则来实现。下面是如何使用 AWS WAF 阻止这些常见攻击的详细操作步骤。 1. 登录到 AWS 管理控制台 打开 AWS 管理控制台。使用你…...
二叉树中的奇偶树问题
目录 一题目: 二思路汇总: 1.二叉树层序遍历: 1.1题目介绍: 1.2 解答代码(c版): 1.3 解答代码(c版): 1.4 小结一下: 2.奇偶树分析…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
