sed 只用来替换文本?一文掌握 sed 更多用法

在 Linux 系统中,sed 命令是一款强大的文本处理工具,它可以进行文本替换、删除、插入等多种操作。本篇文章将详细介绍 sed 命令的用法。


一、sed 命令概述

sed 是 stream editor 的缩写,是一款流式文本编辑器,它以行为单位处理文本数据。通过 sed 命令,我们可以对文本进行各种操作,例如替换、删除、插入等。sed 命令不仅可以独立使用(操作文件),还可以与其他命令配合使用(通过管道),实现更复杂的文本处理需求。


二、sed 命令基本用法

替换文本

替换文本是 sed 命令最常用的功能之一。使用以下命令可以将指定行中的字符串替换为另一个字符串:

sed 's/原字符串/新字符串/g' file

其中,“s”表示替换,“原字符串”是要被替换的字符串,“新字符串”是替换后的字符串,“g”表示全局替换,即替换所有匹配的字符串。如果不加“g”参数,则只会替换每行中的第一个匹配项。

示例:将文件中的“foo”替换为“bar”:

sed 's/foo/bar/g' file
sed '1 s/foo/bar/g' file   #只对第1行进行替换
sed '1,5 s/foo/bar/g' file #只对第1~5行进行替换


删除文本

使用以下命令可以删除指定行中的字符串:

sed 's/原字符串//g' file

其中,“原字符串”是要被删除的字符串,“g”表示全局删除,不再赘述。

示例:删除文件中的“foo”:

sed 's/foo//g' file


插入文本

使用以下命令可以在指定行插入文本:

sed 'n i 插入的文本' file

其中,“n”表示要插入的行号,如果省略则会在每行插入;“i”表示插入操作,插入文本后,原来的第n行变成了第n+1行,相当于是在第n行前插入,“i”换成“a”可以在第n行后插入;“n i”之间以及“i”和插入的文本之间的空格非必需;“插入的文本”是要插入的文本内容。注意,如果要插入的文本本身包含换行符,需要使用转义符“\”进行转义。

示例:在文件插入一行文本:

sed '5 i foobar' file  #在第5行插入文本
sed '$ i foobar' file  #在最后一行前插入文本
sed 'i foobar' file    #在原每一行插入文本

 

正则表达式替换

示例:将Windows路径中的“:\”和“\”替换成“/”:

sed 's/:*\\/\//g' file

其中,“:*\\”中的“*”表示匹配前面的冒号0次或多次,双斜线表示对斜线转义。路径中冒号的匹配,更准确的应该是0次或1次,如果使用“:?\\”则需要对疑问号也进行转义,使用“:\?\\”。

 

与其他命令配合使用

sed 命令可以通过管道接收来自其他命令的输出数据。通过使用管道符号“|”,可以将一个命令的输出作为另一个命令的输入。

示例:找出文件中包含“example”的行,并且将“foo”替换为“bar”后输出:

grep example file|sed 's/foo/bar/g'

 

三、sed 命令高级用法

使用表达式

前面的 sed 命令都是使用单引号。如果需要在命令中使用表达式,改为双引号即可。

示例:将文件中与变量str1的值匹配的内容替换为变量str2的值:

sed "s/${str1}/${str2}/g" file
sed "${i},${j} s/${str1}/${str2}/" file

 

删除文件行

使用以下命令可以删除指定行的文本:

sed 'n d' file

其中,“n”表示要删除的行号,“d”表示删除操作,两者之间可以没有空格:

sed '3d' file        #删除文件第3行
sed '1,10d' file     #删除文件前10行
sed '$d' file        #删除文件最后一行
sed '/Detail/d' file #删除文件中包含Detail的行

上述示例中,将单引号换成双引号,行号、文本,都可以使用${变量}的方式:

sed "${i}d" file      #删除文件第i行
sed "${i},${j}d" file #删除文件第i~j行
sed "$d" file         #删除文件最后一行
sed "/${text}/d" file #删除文件中包含变量text的值的行

​​​​​​​

反向引用

sed 命令能够记住之前匹配的子样式,这被称为反向引用,使用半角括号表示被引用的一个组,括号需要转义。反向引用可以用于替换,也可以用于模式匹配查找内容。

示例:匹配4-5位回文字符:

sed -n '/^\(.\)\(.\).\?\2\1$/p' file

其中,“-n”表示只显示匹配的行,两个斜线“/”及之间的内容表示模式匹配,“^$”分别表示行首和行尾,“\(.\)”表示匹配一个任意字符且放入一个引用组,“.\?”表示中间可以有0~1个字符,“\2\1”分别表示反向引用前面“\(.\)”匹配到的内容,“p”表示打印到标准输出。上述脚本可以输出类似以下内容:

1221
12321
abba
ab!ba

 

四、sed 命令完整用法

授人以渔,命令行执行以下任一命令可以查看 sed 命令的语法说明:

sed --help
man sed

​​​​​​​

 

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

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

相关文章

springboot——helloworld入门

springboot 简化spring开发,约定大于配置,提供完成restful的框架。注解、配置等完成。 restful restful就是提供一堆标准的方法,例如get,put等完成http的网站操作。 helloworld入门 注解 SpringBootApplication 用于表示Spr…

04 牛顿法、高斯牛顿法及 Cpp 实现

文章目录 04 牛顿法、高斯牛顿法及 Cpp 实现4.1 非线性最小二乘4.2 一阶和二阶梯度法4.3 高斯牛顿法4.4 总结4.5 代码实现4.6 三种方法优缺点 04 牛顿法、高斯牛顿法及 Cpp 实现 4.1 非线性最小二乘 考虑最小二乘问题: min ⁡ x F ( x ) 1 2 ∥ f ( x ) ∥ 2 2 \…

wpf 系统在显示器分辨率和缩放设置为非1920*1080和100%时,SelectionChanged事件响应问题分析?

系统在显示器分辨率和缩放设置为1920*1080和100%时,窗口四分格能正常响应SelectionChanged事件,但是当缩放为125%时,或是分辨率大于1920*1080时四分格其中一个格子的下侧和右侧点击不响应,什么原因? 描述的问题可能由以…

考研英语语法(四十)

平行结构-分类 介词短语的平行并列 ……he advocated freedom of thought and of personal expression ……he advocated freedom of thought and of personal expression Mental health allows us to view others with sympathy if…

【qml入门教程系列】:qml列表控件ListView用法介绍

作者:令狐掌门 技术交流QQ群:675120140 博客地址:https://mingshiqiang.blog.csdn.net/ 文章目录 一、ListView基本用法二、ListView delegate妙用delegate 用法1delegate 用法2三、如何获取ListView的点击项一、ListView基本用法 ListView 是 Qt Quick (QML) 中的列表控件…

TypeScript 的高级技巧

1 — 高级类型(Advanced Types) 使用 TypeScript 的高级类型,如映射类型和条件类型,可以基于现有类型构建新类型。通过使用这些类型,您可以在强类型系统中更改和操作类型,从而使您的代码具有更大的灵活性和…

MySQL 数字函数

1. MySQL 数字函数ABS(x) MySQL数字函数ABS(x)用于返回参数x的绝对值。 语法: ABS(x)参数说明: x:要处理的数字。 返回值: 返回参数x的绝对值。 示例: SELECT ABS(-5);输出结果为:5 2. MySQL 数字…

贝叶斯网络 (人工智能期末复习)

文章目录 贝叶斯网络(概率图模型)定义主要考点例题- 要求画出贝叶斯网络图- 计算各节点的条件概率表- 计算概率- 分析独立性 贝叶斯网络(概率图模型) 定义 一种简单的用于表示变量之间条件独立性的有向无环图(DAG&am…

Python和Pygame绘制自动驾驶和移动机器本地规划器算法

可视化自动驾驶车辆路径规划和移动机器人中使用的众多不同的本地规划器算法。 该应用程序提供可定制的参数,以更好地了解每种算法的内部工作原理并探索它们的优点和缺点。 它是用 Python 编写的,并使用 Pygame 来渲染可视化。 基类 import sys import …

从0到1 手把手搭建spring cloud alibaba(二十二)neo4j 优势,原理,使用场景以及案例介绍

1 什么是图数据库 1.1 图关系数据库的背景,为什么会出现图数据库 上世纪80年代,随着关系型数据库的发展,越来越多的应用程序应运而生,项目的增多也伴随着需求场景的增多 应用的数据库关联都只能靠表与表的外键定义,当关系复杂度达到一定数量的时候,关联某些表的某些属性…

tanstack/react-query使用手册

1. useQuery useQuery的使用一、data是后端成功返回的数据, 第一次的值为undefined 二、isLoading是指数据是否正在加载的状态,通常用于判断请求是否还在进行中。当isLoading为true时,表示数据正在加载中,当isLoading为false时&a…

BGP基本配置

一、知识补充 1、BGP BGP是Border Gateway Protocol(边界网关协议)的缩写。它是用于在互联网中交换路由信息的一种协议。BGP被广泛应用于大规模的自治系统(AS)之间,用于实现跨网络的路由选择和交换。 BGP的主要功能…

基于Cocos2D-X框架闯关游戏的设计

摘 要 随着智能设备平台的普及、用户数量的增多,智能平台的应用,尤其是游戏异常火爆,从植物大战僵尸到愤怒的小鸟,移动平台游戏的开发进入了新的阶段。但是另一方面,平台的多样性也给开发者带来诸多不便,怎…

单片机第三季-第四课:STM32下载、MDK和调试器

目录 1,扩展板使用的STM32芯片类型 2,使用普中科技软件下载程序 3,keil介绍 4,JLINK调试器介绍 5,使用普中的调试器进行debug 6,使用Simulator仿真 1,扩展板使用的STM32芯片类型 扩展版…

什么是网络可视化?网络可视化工具有用吗

网络可视化定义是自我描述的,因为它在单个屏幕上重新创建网络布局,以图形和图表的形式显示有关网络设备、网络指标和数据流的信息,为 IT 运营团队提供一目了然的理解和决策。 网络是复杂的实体,倾向于持续进化,随着业…

应急电源控制系统的研究与设计

摘要 本设计基于STC89C52单片机设计得应急电源,以应急电源为研究对象,单片机设计为控制集成IC,ADC为模数转换控制模块,无源蜂鸣器作为报警电路。系统分为单片机设计最小系统,AD转换控制模块,电源电路&#…

【LeeCode】242.有效的字母异位词

给定两个字符串 *s* 和 *t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 注意:若 *s* 和 *t* 中每个字符出现的次数都相同,则称 *s* 和 *t* 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出:…

【C++】异常处理 ⑧ ( 标准异常类 | 标准异常类继承结构 | 常用的标准异常类 | 自定义异常类继承 std::exception 基类 )

文章目录 一、抛出 / 捕获 多个类型异常对象1、标准异常类2、标准异常类继承结构3、常用的标准异常类 二、自定义异常类继承 std::exception 基类1、自定义异常类继承 std::exception 基类2、完整代码示例 - 自定义异常类继承 std::exception 基类 一、抛出 / 捕获 多个类型异常…

java常用知识点记忆

类的继承与多态 类的继承不支持多重继承非private 方法才可以被覆盖覆盖的方法要求,子类中的方法的名字,参数列表,返回类型与父类相同方法的重载是在一个类中定义方法名字相同,但是参数列表不同的方法要是在子类中定义了与父类名字…

【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问

1. 前言 现在我们身边的只能设备越来越多,各种智能手机、平板、智能手表和数码相机充斥身边,需要存储的数据也越来越大,一张手机拍摄的照片都可能有十多M,电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…