sed 语法和基础命令

news2025/1/22 15:02:50

1. 准备工作

准备备一个数据文件data.txt,内容如下:

101,Zhang san,Fu Jian
102,Li si,Shan Dong
103,Wang Wu,Bei Jing
104,Zhao Qian Sun,Zhe Jiang
105,Ge Lin,Shang Hai

每一行为一条数据,每条数据包含三个元素:ID,姓名和籍贯。

2. sed简介

Sed是 Stream Editor的缩写,即流编辑器的意思。它是一款非常出色的文本处理工具,可以操作、过滤转换文本。Sed的输入可以是文件,也可以是管道。刚接触sed时,常常感觉晦涩难懂,深入理解之后,又常惊叹于它的强大。本文介绍sed的基本语法。

3. sed命令语法

它的基本语法很简单:

sed [options] {sed-commands} {input-file} 

sed每次读取{input-file}文件里的一行,并执行{sed-commands}命令,直到文件结束。同时,可以传递一些参数给sed命令,这就是 [options]里的内容。

你是不是已经跃跃欲试了呢?在你的终端上执行:

sed -n 'p' /etc/passwd

执行结果和cat没什么两样,没错,它只是把文件里的内容逐行打印而已。这里的 {sed-commands}只有一个'p'。你可以组合多条sed命令,并把它们写到一个文件里,然后用-f参数选项调用它:

sed [options] -f {sed-commands-in-a-file} {input-file}

写个简单的脚本test-script.sed,其内容如下:

/^root/ p
/^nobody/ p 

然后执行命令:

sed -n -f test-script.sed /etc/passwd

结果有什么不同?这回只输出 /etc/passwd 里以root 和nobody 开头的行,不是吗?

如果只是执行简单的命令组合,再写个脚本也有点费事,想省事的话,那就直接用-e选项,直接把命令写上: 

sed [options] -e {sed-command-1} -e {sed-command-2} {input-file} 
sed -n -e '/^root/ p' -e '/^nobody/ p' /etc/passwd

   如果命令组合比较长,可以用反斜杠换行:

sed -n \
-e '/^root/ p' \
-e '/^nobody/ p' \
/etc/passwd

     如果需要执行一组命令,可以用花括号 { },其语法:

sed [options] '{
sed-command-1
sed-command-2             
}' input-file 

实例:

sed -n '{
/^root/ p
/^nobody/ p
}' /etc/passwd

注意:sed不会修改源文件,它只是把结果输入到stdout。如果你需要保存修改的内容,你需要把输出重定向到目标文件。



4. Sed 脚本流 

sed脚本流程很简单,读取、执行、打印,然后重复。简单描述为REPR四个步骤,分别对应Read, Execute, Print,和 Repea。

• Read 读取一行内容,放入模式空间
• Execute 对模式空间执行sed 命令 
• Print 输入模式空间的处理结果,输入后,模式空间被清空
• Repeat 逐行执行
 

               

5. 打印模式空间 (p 命令) 

可以使用p命令打印当前模式空间里的内容。你可能有点疑惑,既然sed在执行完命令之后,缺省会输入处理后的结果,为什么还需要设置一个p命令?

因为,p命令允许你控制输出内容。通常,当使用p命令时,你需要一个-n参数,否则,你会发现每一行都被打印了两次:

sed 'p' data.txt

sed -n 'p' data.txt 

 

 

  • 限定处理范围

如果你没有在sed命令之前限定处理范围,那么它缺省会处理输入文件里的所有行。如果你只需要处理其中的某一行,怎么办?下面示例只处理第二行:

sed -n '2 p' data.txt

处理前三行: 

sed -n '1,3 p' data.txt

从第二行开始到输入结束:

sed -n '2,$ p' data.txt

  • 控制修改范围

你可以通过逗号、加号和波浪号来控制修改范围。在前面的示例中,我们已经用到了逗号来限定范围,它的语义很明确:n,m表示从n到m。

可以用加号(+)结合逗号,来限定一系列行,而不必使用绝对的行号,比如说:n,+m表示从第n行开始的m行内。

还可以用波浪号 (~)来限定范围。它的含义是跳过。比如说:n~m表示从第n行开始处理,然后每隔m行处理一次。具体实例:
• 1~2 处理1,3,5,7, 等等
• 2~2 处理2,4,6,8, 等等 
• 1~3 处理1,4,7,10, 等等
• 2~3 处理2,5,8,11, 等等

只打印奇数行:

sed -n '1~2 p' data.txt
  • 模式匹配

除了指定行号之外,你还可以指定匹配模式,比如说,找出福建人:

sed -n '/Fu Jian/ p' data.txt

找出第一次出现“Fu Jian”之后,到第四行的内容:

sed -n '/Fu Jian/,4 p' data.txt

通过两个模式限定起始范围: 

sed -n '/Fu Jian/,/Shan Dong/ p' data.txt

   6. 删除行(d命令)

可以用d命令删除当前行。请注意,删除仅作用于输出流,并不是删除源文件里的内容。sed的删除命令和打印命令一样,不会影响源文件。

删除所有内容:

sed 'd' data.txt

   删除第2行:

sed '2 d' data.txt

删除前四行

sed '1,4 d' data.txt

 删除所有空行:

sed '/^$/ d' data.txt

删除注释行

sed '/^#/ d' data.txt

        注意,如果多条sed命令组合,如果碰到删除命令d,整个匹配的模式都会被删除,后续的命令也就不会执行了。

7. 把模式空间的内容写入文件(w命令)

通过w命令,可以把当前模式空间里的内容写入文件。缺省情况下,当前内容会被输出到stdout,如果你希望输出到文件而不是屏幕上,那么需要使用sed参数选项-n。

sed 'w output.txt' data.txt

sed -n 'w output.txt' data.txt

 满园限定和之前所述相似。但是,你可能不常用w命令。而是用重定向'>'。比如说

sed 'p' data.txt > output.txt

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

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

相关文章

薪资涨幅1000%+,转行学Java后,他彻底开挂了

以下为学长故事的文字版: 哈喽黑马程序员的学员们大家好,我是17级毕业的学长陈同学,很高兴和大家分享我的转行故事。 来黑马前后的变化 我刚毕业是去了浙江的一个电力公司,做电器的一个项目,这个项目一共工作了半年…

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计 LT8911EXB是MIPI DSI/CSI 转eDP转换芯片,ASL CS5523不需要改电路就可以直接PIN TO PIN替代与兼容LT8911EXB。 ASL CS5523与 LT8911EXB的功能与参数,用途方式以及封装方式和…

《TCP IP网络编程》第十八章

第 18 章 多线程服务器端的实现 18.1 理解线程的概念 线程背景: 第 10 章介绍了多进程服务端的实现方法。多进程模型与 select 和 epoll 相比的确有自身的优点,但同时也有问题。如前所述,创建(复制)进程的工作本身会…

[Docker精进篇] Docker镜像构建和实践 (三)

前言: Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中,以便在不同环境中快速、可靠地部署和运行应用程序。 文章目录 Docker镜像构建1️⃣是什么?2️⃣为什么?3️⃣镜像构建一、用现有容器构建新镜像…

构建可远程访问的企业内部论坛

文章目录 前言1.cpolar、PHPStudy2.Discuz3.打开PHPStudy,安装网页论坛所需软件4.进行网页运行环境的构建5.运行Discuz网页程序6.使用cpolar建立穿透内网的数据隧道,发布到公网7.对云端保留的空白数据隧道进行配置8.Discuz论坛搭建完毕 前言 企业在发展…

Python科研绘图--Task01

目录 科研论文配图主要成分 常见的插图格式 像素图 矢量图 色彩模式 RGB色彩模式 CMYK色彩模式 HEX色彩模式 色轮配色原理 单色配色方案 例子 互补色配色方案 例子 等距三角配色方案 例子 四角配色方案 例子 颜色主题 单色系 例子 双色渐变色系 例子 多色…

直线导轨的选购要素

直线导轨是用来支撑和引导运动部件,按给定的方向做往复直线运动,主要用于精密机床、坐标测量机和大型机床,对于我们整个国民生产、生活活动都起着至关重要的作用。 我们在选购直线导轨时,都想要选到质量好的,那么我们要…

【JavaEE基础学习打卡05】JDBC之基本入门就可以了

目录 前言一、JDBC学习前说明1.Java SE中JDBC2.JDBC版本 二、JDBC基本概念1.JDBC原理2.JDBC组件 三、JDBC基本编程步骤1.JDBC操作的数据库准备2.JDBC操作数据库表步骤 四、代码优化1.简单优化2.with-resources探讨 总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好…

Spring框架之揭秘Bean的生命周期与单例详解【面试题超详细回答】

目录 一、前言 1.1.介绍Spring框架和Bean的概念 二、Bean的实例化阶段 2.1.Bean的实例化过程 2.2.介绍默认构造函数和工厂方法的使用 三、Bean的初始化阶段 3.1.InitializingBean接口和PostConstruct注解的使用 3.2.Bean的初始化方法配置和执行顺序 四、Bean的销毁阶段…

数据库变革:HashData云数仓实现事务级实时性

8月16-18日,第十四届中国数据库技术大会(DTCC 2023)在北京召开。酷克数据资深解决方案架构师陈义贤在“数据库内核•技术创新”专场发表题为“分布式数仓的TP能力探索—HashData UnionStore”的演讲,介绍HashData以Log is databas…

QT的mysql(数据库)最佳实践和常见问题解答

涉及到数据库,首先安利一个软件Navicat Premium,用来查询数据库很方便 QMysql驱动是Qt SQL模块使用的插件,用于与MySQL数据库进行通信。要编译QMysql驱动,您需要满足以下条件: 您需要安装MySQL的客户端库和开发头文件…

三生ONE物,无限可能|博睿数据上市三周年!

2020年8月17日,北京博睿宏远数据科技股份有限公司作为国内A股市场上的“APM应用性能监控第一股”公司,在科创板荣登上市!(股票号688229) 2023年8月17日,三载日夜更替,博睿一路砥砺前行&#xf…

Eclipse集成MapStruct

Eclipse集成MapStruct 在Eclipse中添加MapStruct依赖配置Eclipse支持MapStruct①安装 m2e-aptEclipse Marketplace的方式安装Install new software的方式安装(JDK8用到) ②添加到pom.xml 今天拿到同事其他项目的源码,导入并运行的时候抛出了异…

Channel是什么?FileChannel类的常用方法

Channel 是一个接口对象,它类似于传统的流对象,但与传统的流对象又有些不同,具体表现如下: • Channel可以异步地执行I/O读写操作。 • Channel的读写操作是双向的,既可以从 Channel中读取数据,又可以写数据到Channel,而流的读写操作通常都是单向的。 • Channel…

Can‘t find end of central directory : is this a zip file ? at XMLHttpRequest

导出woed出现这个报错,原因其实很简单,路径写错了, 这个word首先必须是docx格式,然后必须放在public文件包下 如果放在public文件包下还没有用,则放在public包下 参考帖子: https://www.cnblogs.com/hejun26/p/13647927.html

VR漫游:720度实景参观,打造魅力生态小区

随着城市的不断发展,小区的建设越发具有生态化、绿色化的特点,人们也会偏向选择更加适合居住的小区。为了让更多的用户体验小区的舒适性,不少地产开发商准备引入VR漫游技术。 VR漫游不仅能够真实地展示现场环境,还可以改变传统网络…

shell编程 基础

将content.txt文件中的内容输出到控制台上 将content.txt中有tom的行输出到控制台 将$2文件中含有gree的行输出到控制台 case语法 简易计算器 查找有root的行 查找以root开头的行 查询时忽略大小写 grep -E 则适用于复杂的正则表达式,可以使用多项选择、重复和子表达…

开发者不可错过的提效工具——低代码开发

开发者不可错过的提效工具 基础低码功能及搭建 01、代码生成器 02、工作流程 03、门户设计 04、大屏设计 05、报表设计 06、第三方登录 07、多租户实现 08、分布式调度 为什么低码平台能够成为开发者的宠儿? 1.低码平台能够大幅提高开发效率 2.低码平台具备高度的可…

QString常用函数介绍

此篇博客核心介绍QT中的QString类型的常用函数,介绍到的函数均从帮助手册或其他博客中看到 QString 字符串类 Header: #include qmake: QT core 一、QString字符串转换 1、QString类字符串转换为整数 int toInt(bool *ok Q_NULLPTR, int base 10) cons…

NOTA标记多肽氨基酸试剂,NOTA-E(cRGDfK)2的化学特性

今日文章关键词:DOTA 偶联肽,NOTA-E(cRGDfK)2,NOTA标记多肽氨基酸试剂 产品描述:DOTATATE acetate 是一种 DOTA 偶联肽,可以被放射性核素标记以用于正电子发射断层扫描 (PET) 成像和肽受体放射性核素治疗 (PRRT)。 英…