sed替换命令

news2024/12/24 22:06:02

用sed编辑流时,最强大的命令莫过于它的替换命令。它有许多参数选项,可以完成诸多复杂的工作。

1. 替换命令的语法

sed '[address-range|pattern-range] s/original-string
/replacement-string/[substitute-flags]' inputfile 

注意,上面的换行仅是为了阅读方便。下面我们逐项解释各个字段的含义:

  • address-range 或pattern-range:可选参数,用于指定sed命令的作用范围,如果没指定,那么sed将作用于输入的所有行。
  • s:替换命令
  • original-string:在输入文本中查找的源字符串。它可以是正则表达式
  • replacement-string:original-string将被替换为replacement-string
  • substitute-flags:可选的控制参数选项

sed命令并不会改变源文件的内容,它的替换指令同样不会。它仅作用于模式空间中的内容,并把处理后的结果输出到stdout。下面我们看两个实例:

1.1 把所有‘Fu Jian’替换为‘Guang Dong’

sed 's/Fu Jian/Guang Dong/' data.txt



1.2 只把包含Zhao的行里的‘Zhe Jiang’替换为‘Fu Jian'

sed '/Zhao/s/Zhe Jiang/Fu Jian/' data.txt



2. 全局标识g

 缺省sed命令只会替换每一行中查找到的第一个{original-string} 。如果你需要替换输入内容中的所有{original-string} ,那么你就需要全局标识g,它指示sed进行全局替换(当前行范围内)。

2.1 把第一个字母a替换为A

sed 's/a/A/' data.txt


2.2 替换所有字母a为A

sed 's/a/A/g' data.txt


3. 数值标识

可以用数值标识来指定第几次匹配到的字符串将被替换。数值的取值范围为1到512。比如说,/8标识将只替换第8次出现的字符串。

3.1 替换第2个a为A

sed 's/a/A/2' data.txt

 4. 打印标识p

替换命令里的打印标识p就是控制打印行为的。在替换成功后,它打印出修改后的内容。和其它sed命令一样,与-n选项结合使用,改变sed的缺省行为。

4.1 把所有‘Fu Jian’替换为‘Guang Dong’,并只输出修改过的行

sed -n 's/Fu Jian/Guang Dong/p' data.txt

 5. 写文件标识w

替换指令里的w标识作用于写文件。在替换成功后,它将修改后的内容写入一个文件。写脚本时,很多时候会用p来代替w,并通过重定向来写文件。

sed -n 's/Fu Jian/Guang Dong/w output.txt' data.txt
sed -n 's/Fu Jian/Guang Dong/p' data.txt > output.txt

 6. 忽略大小写标识i

sed匹配是大小写敏感的。可以使用i标识转换为大小写不敏感的模式,但这仅是GNU sed提供的特性,并非通用版本参数。

7. 执行标识e

这也是GNU sed提供的特性。通过e标识,你可以在模式空间上执行任何可用的shell命令,它的执行结果会返回给模式空间。

这里假设存在一个文件files.txt,其内容:

/etc/passwd 
/etc/group

执行:

sed 's/^/ls -l /' files.txt

它在文件的每一行的行首加上ls -l: 

 但是这样并不会真正执行shell命令。接下来,我们就用e标识让它执行起来:

sed 's/^/ls -l /e' files.txt

 8. 组合sed替换标识

前面的示例中,都是使用单一的标识。但是,你可以根据需求,组合多个标识使用。比如:

sed -n 's/Li/Lee/gipw output.txt' data.txt


9. sed替换的分隔符

前面的示例中,一直使用缺省的sed分隔符斜杠‘/’。如果original-string或replacement-string里包含斜杠,那么,就需要对它进行转义。如果文本里描述的是路径,可能转义后会变成这样:

 sed 's/\/usr\/local\/bin/\/usr\/bin/' path.txt

是不是很丑陋,书写又很麻烦?幸运的是,我们可以改变缺省的分隔符,很简单:

sed 's|/usr/local/bin|/usr/bin|' path.txt
sed 's^/usr/local/bin^/usr/bin^' path.txt
sed 's@/usr/local/bin@/usr/bin@' path.txt
sed 's!/usr/local/bin!/usr/bin!' path.txt

10. 作用同一行的多条替换命令

sed执行的流程是REPR,即,读取,执行,打印,重复。在执行阶段,可以有一条或多条sed命令,它们会依次执行。后面一条指令的输入,是前一条指令的输出,换句话说,如果前一条指令改变了模式空间里的某些内容,那么后一条指令处理的内容就不是原始输入的内容,而是前一条指令修改后的内容。

11. &-模式匹配

当replacement-string里使用&时,它既可以匹配常规的字符串,也可以执行模式匹配。给两个实例:

  • 为ID加上方括号:
sed 's/^[0-9][0-9][0-9]/[&]/g' data.txt

  •  为整行加上尖括号:
sed 's/^.*/<&>/' data.txt

 12. 分组替换(单个分组) 

sed可以使用分组,就像通常的正则表达式那样。分组以“\(”打头,并以“\)”结尾。分组可以和 back-referencing组合使用。Back-references是由分组选择的一个正则表达式的复用部分。sed里的Back-references可以出现在正则表达式里,也可以出现在替换命令中的replacement部分。

sed 's/\([^,]*\).*/\1/g' data.txt

命令说明:

  • 正则表达式\([^,]*\)匹配字符合串到第一个逗号为止
  • replacement-string里的\1替换第一个匹配的分组
  • g是全局替换标识

总结起来就一句话,提取输出内容中的第一个字段。

试试下面这个:

sed 's/\([^:]*\).*/\1/' /etc/passwd

下面这个示例,为每个单词打头的字母加上一对括号()。 

echo "The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'

13. 分组替换(多个分组)

sed支持多个分组替换,每个分组都由一个“\(”和一个“\)”来限定。当你在替换匹配的正则表达式中添加多个分组之后,可以在replacement串中通过 \n来指定第n个分组。

13.1 提取第一列和第三列字段

sed 's/\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/g' data.txt

14. GNU版本的扩展标识

GNU版本的sed有些有趣的扩展标识,它们可用于替换命令中的 replacement-string部分。

  • \l
  • \L
  • \u
  • \U
  • \E

它们的具体用途,请参考手册。

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

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

相关文章

day-27 代码随想录算法训练营(19)回溯part03

39.组合总和 分析&#xff1a;同一个数可以选多次&#xff0c;但是不能有重复的答案&#xff1b; 思路&#xff1a;横向遍历&#xff0c;纵向递归&#xff08;不同的是递归的时候不需要跳到下一个位置&#xff0c;因为同一个数可以选多次&#xff09; class Solution { publ…

计算机视觉入门 3)最大池化

目录 一、最大池化最大池化进行压缩平移不变性 二、代码示例步骤2&#xff1a;图像读取转换步骤2&#xff1a;Filter & ReLU步骤3&#xff1a;Pool 一、最大池化 最大池化进行压缩 在Keras中&#xff0c;通过一个 MaxPool2D 层&#xff0c;将压缩步骤添加到之前的模型中&…

CentOS下载ISO镜像的方法

目录 一、CentOS 介绍 二、进入CentOS 官方网站 三、步骤 一、CentOS 介绍 CentOS&#xff0c;中文意思是社区企业操作系统是Linux发行版之一&#xff0c;是免费的、开源的、可以重新分发的开源操作系统。 CentOS Linux发行版是一个稳定的&#xff0c;可预测的&#xff0…

防静电实时监控系统的工作原理和主要功能

防静电监控系统是一种用于实时监测静电数值变化的集成系统。它的主要作用是检测和预防静电所可能引起的危险和损坏。以下是该系统的一般工作原理和主要功能&#xff1a; 1. 检测静电&#xff1a;防静电实时监控系统通过传感器和测量设备来监测周围环境中的静电水平。这些传感器…

TDA4超级玩家浮出水面,行泊一体功能、成本刷到极致

2023年以来&#xff0c;智能驾驶市场进入L2普及、高阶ADAS功能&#xff08;NOA&#xff09;大规模量产的新周期&#xff0c;降本增效&#xff0c;打造极致性价比、提升用户体验等&#xff0c;成为了竞争的焦点。 其中&#xff0c;替换更具性价比的硬件平台、传感器复用、系统优…

h264 SPS 帧分辨率解析标准

来源:微信公众号「编程学习基地」 文章目录 导致1088出现的原因h264 sps解析h264bitstream的简单使用导致1088出现的原因 大部分IPC推过来的数据流都是标准的1080P(1920x1080),720P(1280x720) 但是也有个例,部分设备存在16位/32位对齐的情况,出现非标1080P(1920x1088),72…

这些数学运算符号你都见过吗?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 数学运算是编程时少不了的操作。 其中加减乘除都比较简单&#xff0c;就和正常数学中的写法一样。要注意的就是在绝大多数编程语言中&#…

怎样做好数字营销呢?

2023 年&#xff0c;数字营销将随着新技术、趋势和消费者行为的不断发展而不断发展。要在 2023 年在数字营销领域取得成功&#xff0c;请考虑以下策略&#xff1a; 1.内容质量和个性化&#xff1a; 专注于制作与目标受众产生共鸣的高质量且相关的内容。 根据用户偏好、行为和…

elemenPlus ElMessage 字符串如何换行问题

因为后端返回的数据是一长串&#xff0c;而且带有\r,\n等换行符&#xff0c;但是并没有生效。前端写法&#xff1a; // 抛出错误ElMessage.error(msg);我们知道\r&#xff0c;\n&#xff0c;\r\n 是在不同系统下的换行符的表示&#xff0c;但在JavaScript返回字符串中并没有生效…

为何有很多人选择使用ChatGPT的替代品?

尽管ChatGPT备受赞誉且确实是出色的工具&#xff0c;但它也有一些限制。 现在有一些工具比ChatGPT更为经济&#xff0c;并且拥有大量现成的功能&#xff0c;而在ChatGPT中&#xff0c;这需要收集整理编写大量的提示。[1] ChatGPT没有提供对GPT-4模型的无限访问&#xff0c;也没…

GIS应用技巧之空间插值分析

一、空间插值概论 空间插值常用于将离散点的测量数据转换为连续的数据曲面&#xff0c;以便探究空 间现象的分布模式&#xff0c;该方法通常用来分析地区环境污染、地区降水量、地区气候 变化、资源利用程度、公共基础设施影响效应等。空间插值方法分为两类&#xff1a;一类 是…

c语言——判断一个字符有多少位数

//判断一个字符有多少位数 #include<stdio.h> #include<stdlib.h> int main() {long long n;int count0;printf("输入整数&#xff1a;");scanf("%lld",&n);while(n!0){n/10;count;} printf("数字是%d位数\n",count);system(&qu…

探索组间差异利器:Tukey 检验 【Tukey Test】

前言 统计学中有许多方法可用于比较不同组别之间的差异&#xff0c;而其中一种常见且强大的工具就是Tukey检验。当我们进行多组实验或研究时&#xff0c;常常需要了解哪些组别之间存在显著差异&#xff0c;而不仅仅是确定是否存在差异。在这个问题上&#xff0c;Tukey检验可以为…

ArcGIS Pro怎么解决道路压盖问题

在默认情况下&#xff0c;道路可能会存在低等级道路将高等级道路压盖、在道路连接处不连通的情况&#xff0c;这些问题都可以在ArcGIS Pro内解决&#xff0c;这里为大家介绍一下处理方法&#xff0c;希望能对你有所帮助。 道路分级 在符号系统内&#xff0c;选择唯一值&#x…

查看镁光DDR芯片型号的办法

查看镁光DDR芯片型号的办法 百度镁光官网 搜索decoder 输入需要查询的FBGA信息 镁光芯片丝印有两行&#xff0c;第一行为产地&#xff0c;不用管&#xff0c;第二行就是FBGA

PLSQL DEVELOPER 右侧工具栏剪贴板不见了怎么显示

解决&#xff1a;在左侧顶级菜单中找到视图&#xff0c;然后找到PLSQL剪贴板&#xff0c;把它勾选上&#xff0c;就会显示出来了。

企业虚拟直播是什么,操作界面和直播观看界面截图介绍

企业虚拟直播是什么&#xff0c;操作界面和直播观看界面截图介绍 企业MR虚拟直播操作界面和直播观看界面 “虚拟场景虚拟特效虚拟录播/直播”技术方案.MR虚拟直播 MR虚拟直播带来的内容、体验和互动的升级&#xff0c;对多个行业、场景具有重大意义&#xff0c;尤其是在汽车、科…

MySQL 、Sql server 错误处理机制 \输出特点的错误信息

sql server 错误处理机制 try 。。。catch ---Try Catch Syntax BEGIN TRY{<sql statements>} end TRY BEGIN Catch{<sql> statements} end catch [;]MySQL 程序错误处理机制 ** 定义条件 定义处理程序** 定义条件&#xff1a; declare 错误名称 condition …

物流签收异常,财务对账复杂,怎么解决?

电子商务行业的蓬勃发展为人们的购物体验带来了巨大的便利&#xff0c;然而&#xff0c;随之而来的物流签收异常和财务对账复杂问题却给电商企业的财务部门带来了一系列困扰。 每天大量的订单和货物流转&#xff0c;不可避免地导致了物流签收数据与财务记录之间的不一致和差异…

七夕特别!用代码绘制爱心,送你一份浪漫的礼物

七夕情人节即将来临&#xff0c;是时候为心爱的人准备一份特别的礼物了。不过&#xff0c;我们今天要来换个方式&#xff0c;用一段简单的Python代码绘制一个爱心图案&#xff0c;再搭配一个暖心的七夕文案&#xff0c;为这个特别的日子增添一份浪漫与惊喜。 # -*- coding: ut…