sed 命令与正则表达式

news2024/11/14 20:41:21

sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都会被打印到屏幕上。

sed 编辑器逐行处理文件(或输入),并将结果打印到屏幕上。

具体过程如下:首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。

sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以直接使用不会修改原文件内容。

如果要修改原文件,需要添加 -i 选项。

输出文件内容

将 regular_express.txt 的内容列出并打印行号,并将 2-5 行删除显示:

nl regular_express.txt | sed '2,5d'

2,5d 表示删除 2~5 行,d 即为 delete。

3-3-0

同理,删除第 2 行:

nl regular_express.txt | sed '2d'

删除第三行到最后一行, $ 表示定位到最后一行:

nl regular_express.txt | sed '3,$d'

使用 -i 在原文件中删除第 1 行:(注意:该指令会修改原文件)

sed -i '1d' regular_express.txt

使用 a 和 i 新增输出

在第二行后添加字符串 test:

nl regular_express.txt | sed '2a test'

3-4-0

在第二行前添加字符串 test:

nl regular_express.txt | sed '2i test'

在第二行后添加两行 test,\n 表示换行符:

nl regular_express.txt | sed '2a test\ntest'

行内容替换

将 2-5 行的内容替换为 No 2-5 number,c 为替换内容选项:

nl regular_express.txt | sed '2,5c No 2-5 number'

3-5-0

输出指定行

输出 regular_express.txt 的第 5-7 行,其中 -n 为安静模式选项,我们在前面的章节中已经介绍过。

执行以下两条命令可以明显看出区别:

nl regular_express.txt |sed -n '5,7p'
​
nl regular_express.txt |sed  '5,7p'

3-6-0

字符串替换

格式为:sed 's/lodstr/newstr/g'

来看一个实例。首先查看本机 IP 地址:

ifconfig eth0

字段inet 地址:192.168.x.x即为本机的 IP 地址,这是经由 NAT 转换后分配的内网 IP 地址,在此不做展开。若想进一步学习计算机网络的相关知识可以参阅 TCP/IP 网络协议基础入门。

之后使用 grep 指令在 ifconfig eth0 的结果中查找 inet,并打印至终端:

ifconfig eth0 | grep 'inet'

可以使用字符串替换功能将 IP 前面的部分予以删除,按照思路,也就是将 inet 地址: 替换为空字符串,可以简单写成:

ifconfig eth0 | grep 'inet '| sed 's/inet 地址://g'

(注意中文字符不能直接复制,需要自己在终端输入)

但正则表达式在实际应用中可以非常灵活,回想一下我们在前两节所学的关于正则表达式的知识(忘了也不要紧,可以随时返回查看)。

. 表示任意一个字符,* 表示重复字符,{ } 表示限定连续字符范围,所以正则表达式也可以写成:

ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'
# 或者
ifconfig eth0 |grep 'inet '| sed 's/.\{0,9\}://'

表达式的写法并不唯一,在此也并未全部列出,大家亦可自行尝试使用其他写法,欢迎在评论区中讨论。

将 IP 后面的部分删除:

/sbin/ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'| sed 's/..:.*$//g'
​
/sbin/ifconfig eth0 |grep 'inet '| sed 's/.inet...://g'| sed 's/.\{0,3\}:.*$//g'

3-7-0

上述指令是比较复杂的正则表达式运用,熟悉正则表达式后可以明显地简化指令,简单便捷地完成文件的查询、修改等任务。

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

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

相关文章

Llama 3.1论文中文对照翻译

The Llama 3 Herd of Models 模型群 Llama 3 Llama Team, Al Meta 1 {}^{1} 1 Llama 团队,Meta Al 1 {}^{1} 1 1 {}^{1} 1 A detailed contributor list can be found in the appendix of this paper. 1 {}^{1} 1 详细的贡献者名单可在本文附录中找到。 Mod…

计算机的错误计算(五十七)

摘要 展示 函数的错误计算。 由计算机的错误计算(五十五)知,国际IEEE 754 标准给出的 函数的定义域是. 那么,在这个实数域范围内,软件的实现效果怎样? 例1. 已知 在数学软件 Maple 中计算 在Maple …

【ML】Auto-encoder

【ML】Auto-encoder 1. Auto-encoder自编码器的基本结构自编码器的特点自编码器的应用场景总结 2. Discrete Representation3. Anomaly Detection3.1 异常检测的特点3.2 常见的异常检测方法3.3 应用场景3.4 总结 1. Auto-encoder 自编码器(Auto-encoder&#xff0…

大模型时代的机遇与挑战

从技术突破到技术社会的融合发展 沈向洋 通用人工智能时代,我们应该怎样思考大模型? 思考 1 算力是门槛 算力成长(来自EPOCH AI) GPT4 2x1025 GPU算力增长 影响算力的两大要素:模型大小(参数量N&#x…

cesium自定图弹框

token记得换成您自己的!!! 申请cesium的token 官网【Cesium: The Platform for 3D Geospatial】 pickEllipsoid在加载地形的情况下有一定误差,地形凹凸程度越大,误差越大。 pickPosition在depthTestAgainstTerrain…

★ C++进阶篇 ★ 继承

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----继承 ~ 目录 一 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承⽗类成员访问⽅式的变化 1.3 继承类模板 二 父类和子类对象赋值兼容转换…

Spring -- 事务

Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…

用Manim创建条形图【BarChart】

BarChart是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图&#xff0c;其参数可以调整条形的外观和布局。 BarChart(values, bar_namesNone, y_rangeNone, x_lengthNone, y_lengthNone, bar_colors[#003f5c, #58508d, #bc5090, #ff6361, #ffa600],bar_w…

信息安全服务资质CCRC认证需要哪些条件?

CCRC认证是中国信息安全认证中心开展的信息安全服务资质认证&#xff0c;涵盖7个方向&#xff0c;包括安全集成、安全运维、风险评估、应急处理、软件安全开发、灾难备份与恢复、网络安全审计。每个认证方向的资质级别分为一级、二级、三级&#xff0c;一级最高&#xff0c;三级…

网络基础篇~路由、网络类型和相关命令

一、安装Cisco模拟器 功能&#xff1a;Cisco Packet Tracer&#xff0c;是Cisco官方提供的网络模拟器&#xff0c;专门用于教学和学习网络技术。它提供了广泛的Cisco设备模拟&#xff0c;并具有一个直观的界面&#xff0c;可用于创建、配置和模拟网络拓扑。 &#xff08;一&…

基于vue框架的Android共享停车位i00t4(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,车位主,车位出租,车位预约,取消预约 开题报告内容 基于Vue框架的Android共享停车位系统 开题报告 一、研究背景及意义 1.1 研究背景 随着城市化进程的加速&#xff0c;私家车数量急剧增加&#xff0c;停车难问题日益凸显&…

玛雅房产系统源码开发与技术功能解析

引言 随着房地产市场的蓬勃发展&#xff0c;房产管理系统&#xff08;Real Estate Management System, REMS&#xff09;作为提升行业效率、优化资源配置的关键工具&#xff0c;其重要性日益凸显。房产系统源码开发不仅涉及复杂的业务逻辑处理&#xff0c;还融合了先进的软件开…

无人机之热成像篇

一、定义 无人机热成像技术是指将热成像相机安装在无人机云台上&#xff0c;通过无人机的高空飞行能力和云台的稳定性&#xff0c;结合红外热成像技术对目标区域进行非接触式的温度测量和图像采集。该技术利用物体发出的红外辐射来生成图像&#xff0c;通过测量物体表面温度分布…

08、MySQL-事务

目录 1、事务简介 2、事务操作 2.1 方式一 2.2 方式二 3、事务四大特性 4、并发事务问题 5、事务隔离级别 1、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c…

第27课 Scratch入门篇:放大的数字

放大的数字 故事背景&#xff1a; 舞台上输入 12345&#xff0c;数字竟然能显示很大&#xff0c;奇妙的数字如何显示的&#xff1f; 程序原理&#xff1a; 重点是如何利用克隆的知识&#xff0c;通过角色造型编号来显示具体的数字。 开始编程 1、在角色绘制中&#xff0c;…

Learn ComputeShader 05 Using noise in the shader

首先实现一个简单的噪声效果 实现原理也很简单&#xff0c;只是在每个线程使用随机函数获得一个随机值 float random (float2 pt) {const float a 12.9898;const float b 78.233;const float c 43758.543123;return frac(sin(dot(pt, float2(a, b))) * c ); }[numthreads(8…

STM32-USART时序与寄存器状态分析

一、时序分析 在UART&#xff08;通用异步收发传输&#xff09;通信中&#xff0c;信号线上的状态分为两种&#xff1a;逻辑1&#xff08;高电平&#xff09;和逻辑0&#xff08;低电平&#xff09;。在空闲状态下&#xff0c;数据线应保持逻辑高电平。UART协议中的各个信号位具…

拥抱变革:旗晟智能巡检机器人系统重塑高风险行业巡检模式

随着工业自动化的快速发展&#xff0c;特别是在石油、化工、煤矿等高风险行业中&#xff0c;传统的巡检方式已难以满足现代企业的需求。高频次、全天候、重复的人工巡检不仅效率低下&#xff0c;还面临着人身安全、数据准确性和运营成本等多方面的挑战。针对这些问题&#xff0…

大模型算力基础设施技术趋势、关键挑战与发展路径

文章目录 前言一、大模型技术发展趋势1.1 大语言模型1.2 多模态模型1.3 长序列模型1.4 混合专家模型二、大模型算力基础设施发展问题与挑战2.1 可用算力规模亟需算力利用效率提升2.2 集群性能提升依赖跨尺度、多层次互联三、大模型算力基础设施高质量发展路径总结前言 从大模型…

SpringCloud与SpringBoot之间的关系解析

Spring Cloud和Spring Boot是两个独立的项目&#xff0c;分别用于构建微服务架构和快速构建Java应用程序。它们之间有着密切的关系&#xff0c;可以相互配合使用。 Spring Boot简介 Spring Boot是一个用于快速构建Java应用程序的框架。它简化了Spring应用程序的开发过程&#x…