当前位置: 首页 > news >正文

sed编程入门

一.sed是啥

sed流编辑器,Stream Editor)是 Unix/Linux 系统中强大的文本处理工具,常用于对文本进行替换、删除、插入、追加等操作。它逐行处理输入文本,并根据提供的脚本命令修改文本,最后输出结果。

二.基本操作

1.修改操作

(1)对整个文本进行修改

sed "s/-year/years" people.txt

 

(2)对文本指定行号进行修改

sed "2s/-year/years/" people.txt 

(3)对2到5行进行修改

sed "2,5s/-year/years/" people.txt 

 

(4)直接对原文进行修改加上-i

sed "2,5s/-year/years/" people.txt -i

(5)替换每一行中的所有的小写 s 成大写 S:

sed "s/s/S/g" people.txt

注意:g 的意思是一行中所有的匹配项,否则缺省只会匹配第一个 s

(6)替换每一行中的第 2 个小写 s 成大写 1:

sed "s/s/1/2" people.txt

 

(7)替换每一行中的第 2 个以后的小写 s 成大写 1:

sed "s/s/1/2g" people.txt 

2.多个匹配

(1)将 "-year" 改成 "years",并且将第 3 行以后的最后一个任意字符去掉:

 

在 sed 命令里,3,$s/.$// 是一段用于文本处理的规则,下面这就拆分成几个部分,给你详细讲讲每个符号的含义:

1. 行范围:3,$

  • 3 代表第 3 行$ 在 sed 里是一个特殊符号,专门用来表示最后一行
  • 把它们用 , 连起来 3,$,整体的意思就是 “从第 3 行开始,一直到文件的最后一行” 。也就是说,下面的替换操作(s/.$//)会作用在这个范围内的每一行文本上。

2. 替换语法:s/原内容/新内容/

这是 sed 里最常用的替换操作格式s 就是 “substitute(替换)” 的意思,整个结构就是告诉 sed :找到 “原内容”,把它换成 “新内容” 。

3. 匹配规则:.$

  • . 是正则表达式里的元字符,代表任意一个单个字符(像字母、数字、标点符号这些,除了换行符一般都能匹配)。
  • $ 前面讲过,是行尾的意思。把它们放一起 .$ ,就是说要匹配行末尾的那一个任意字符 。打个比方,要是一行文本是 abcde. ,那这里的 .(行末尾的那个点)就会被 .$ 匹配到;要是文本是 abcde ,那最后一个字符 e 会被匹配。

4. 替换为空://

sed 替换语法里,/ 是用来分隔 “原内容” 和 “新内容” 的。这里 “新内容” 的位置是空的(两个 / 紧挨着),意思就是把前面 .$ 匹配到的内容(行末尾最后一个字符 )替换成空字符串,说白了就是把行末尾最后一个字符删掉 。

 注意:

*在单引号里面,元义字符可以直接使用,如果要去掉元义则要在前面加 \;在双引号里面,sed 的命令要使用元义,则需要加 \,而命令的正则表达式要使用元义直接使用就行。

*在 sed 命令中,-e 选项用于指定多个编辑命令,允许在一次 sed 执行中组合多个操作。

(2)将 & 代替被匹配的变量:

sed -e "s/iS/[$]/" people.txt 

将文本中每一行出现的第一个 is 的左右两边加上 [ ]

(3)在指定行的前面插入 (i) 或者后面插入 (a) 一些信息:


sed ’3i abcd’ people.txt 意思是 ==> 在第 3 行的前面插入 abcd
sed ’2a abcd’ people.txt 意思是 ==> 在第 2 行的后面插入 abcd
sed ’1,4a abcd’ people.txt 意思是 ==> 在第 1 至 4 行的后面分别插入 abcd
sed ’/US/a abcd’ people.txt 意思是 ==> 在匹配 US 的行的后面插入 abcd

(4)将指定的行替换成其他信息:


sed "2c ok" people.txt 意思是 ==> 将第 2 行替换成 ok

(5)将指定的行删除掉:


sed ‘2d’ people.txt 意思是 ==> 将第 2 行给删掉
sed ‘/US/d’ people.txt 意思是 ==> 将匹配 / US / 的所有行给删掉
sed ’/<he>/d’ people.txt 意思是 ==> 将匹 配 he 的所有行给删掉,注意:之所以要用 <> 将 he 给括起来,是因为不想匹配 she,当然,<> 需要转义,写成 <>

(6)打印指定匹配的行,用命令 p:


sed ’/Chen/p’ people.txt -n 意思是 ==> 打印匹配 Chen 的行
sed ’/Chen/, /Lau/p’ people.txt -n 意思是 ==> 打印匹配 Chen 或者 Lau 的行
sed ’3,/UK/p’ people.txt -n 意思是 ==> 从第 3 行开始打印,直到匹配 UK 为止
sed ’/UK/,6p’ people.txt -n 意思是 ==> 从匹配 UK 的行开始打印,直到第 6 行为止

3.总结:

3.5        3代表开始5代表结束

&           代表he匹配的字符串

/A/          A为需要匹配的字符串

//            清空

s/A/a/     替换

i              前面插入

a             后面插入

d             删除

p             打印

在正则表达式中      <>        |        {}        ()        +若是单引号不需要加上\,双引号需要加上\

http://www.dtcms.com/a/306494.html

相关文章:

  • Android RTMP推送|轻量级RTSP服务同屏实践:屏幕+音频+录像全链路落地方案
  • 本地 docker 部署 HAR包分析工具 harviewer
  • 2025年7月技术问答第5期
  • MySQL: with as与with RECURSIVE如何混合使用?
  • 【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
  • 专题:2025机器人产业技术图谱与商业化指南|附130+份报告PDF、数据汇总下载
  • C++实战:抖音级视频应用开发精髓
  • LazyLLM教程 | 第2讲:10分钟上手一个最小可用RAG系统
  • [极客时间]LangChain 实战课 -----|(11) 记忆:通过Memory记住客户上次买花时的对话细节
  • macOS 设置 Claude Code
  • 02 NameServer是如何管理Broker集群的
  • 【STM32-HAL】 SPI通信与Flash数据写入实战
  • Elasticsearch(ES)基础语法(笔记)(持续更新)
  • MySQL索引和事务笔记
  • 如何通过项目管理系统提升交付率
  • Kafka 重复消费与 API 幂等消费解决方案
  • IO复用实现并发服务器
  • 【PZ7020-StarLite 入门级开发板】——FPGA 开发的理想起点,入门与工业场景的双重优选
  • 【工具】jsDelivr CDN完全指南:免费高速的开源项目CDN服务
  • Apache Ignite 与 Spring Boot 集成
  • Linux 进程管理与计划任务设置
  • 【Dv3admin】ORM数据库无法查询的问题
  • 如何修改VM虚拟机中的ip
  • opengauss数据库安装及测试
  • 【C语言】深度剖析指针(二):指针与数组,字符,函数的深度关联
  • SpringBoot中ResponseEntity的使用详解
  • .NET报表控件ActiveReports发布v19.0——正式兼容 .NET 9
  • 动态爱心视觉特效合集(含 WebGL 与粒子动画)
  • 传输层协议UDP与TCP
  • 微算法科技MLGO突破性的监督量子分类器:纠缠辅助训练算法为量子机器学习开辟新天地