Linux文本处理三剑客:sed

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上一期中,我们将详细介绍grep的基本使用方法,希望能够帮助到有需要的朋友,现在,我们继续学习sed。

我会参考官方文档来做翻译理解。下面正式开始:

sed(Stream Editor) 命令,翻译为:流编辑器。它主要用于文本替换、查找和替换,以及其他文本操作,例如插入、删除和搜索。使用sed,我们可以在不打开整个文件的情况下编辑文件内容。它还支持正则表达式,使其成为更强大的文本操作工具。

虽然 sed 在某些方面类似于允许脚本编辑的编辑器(例如 ed),但它通过只对输入进行一次遍历来工作,因此效率更高。然而,sed 真正与其他类型的编辑器区别之处在于它可以在管道中过滤文本的能力。

 GNU sed 主页: GNU sed - GNU Project - Free Software Foundation

GNU 软件通用帮助: Getting help with GNU software- GNU Project - Free Software Foundation

下面是关于 sed 命令的详细介绍,包括参数、用法和示例代码。

1.sed 命令详解(中文)

语法

sed [选项]... {脚本(仅在没有其他脚本时)} [输入文件]...

参数选项

-n, --quiet, --silent抑制模式空间的自动打印-e script, --expression=script将脚本添加到要执行的命令中-f script-file, --file=script-file将脚本文件的内容添加到要执行的命令中--follow-symlinks原地处理时跟踪符号链接-i[后缀], --in-place[=后缀]原地编辑文件(如果提供了后缀,则会进行备份)-c, --copy在 -i 模式下对文件进行改组时使用复制而不是重命名-b, --binary不执行任何操作;用于与 WIN32/CYGWIN/MSDOS/EMX 兼容(以二进制模式打开文件(CR+LF 不被特殊处理))-l N, --line-length=N指定 l 命令所需的行包装长度--posix禁用所有 GNU 扩展。-r, --regexp-extended在脚本中使用扩展正则表达式。-s, --separate将文件视为单独的文件,而不是单个连续的长流。-u, --unbuffered从输入文件中加载少量数据,并更频繁地刷新输出缓冲区-z, --null-data用空字符 (NUL) 分隔行--help显示此帮助并退出--version输出版本信息并退出

如果没有给出 -e, --expression, -f, 或 --file 选项,则第一个非选项参数将被视为要解释的 sed 脚本。所有剩余的 аргумент (yìrgēn) 都将被视为输入文件名;如果没有指定输入文件,则读取标准输入。

2.sed 命令语法概要(中文)

这仅仅是 sed 命令的简要语法概要,旨在为已经熟悉 sed 的用户提供提醒。有关更完整的描述,请查阅其他文档(例如 texinfo 文档)。

零地址“命令”

 Zero-address ``commands'': label   用于 b 和 t 命令的标签。# comment  注释一直持续到下一个换行符(或 -e 脚本片段的末尾)。}  {} 代码块的结束括号。

零地址或单地址命令

=   打印当前行号。
a \
文本   追加文本,其中每个嵌入的新行都以反斜杠开头。i \
文本   插入文本,其中每个嵌入的新行都以反斜杠开头。q [退出代码]立即退出 sed 脚本,不再处理任何输入,除非禁用了自动打印,否则将打印当前模式空间。退出代码参数是 GNU 扩展。Q [退出代码]立即退出 sed 脚本,不再处理任何输入。这是 GNU 扩展。r 文件名   追加从 filename 读取的文本。R 文件名   追加从 filename 读取的一行。每次调用该命令都会从文件中读取一行。这是 GNU 扩展。

接受地址范围的命令

{        开始一个命令块(以 } 结束)。b label   跳转到标签;如果省略标签,则跳转到脚本末尾。c \
text     用文本替换选定的行,其中每个嵌入的新行都以反斜杠开头。d        删除模式空间。开始下一个循环。D        如果模式空间不包含换行符,则启动一个标准的新循环,就像发出 d 命令一样。否则,删除模式空间中的文本直到第一个换行符,并使用结果模式空间重新启动循环,而不读取新的输入行。h H      将模式空间复制/追加到保持空间。g G      将保持空间复制/追加到模式空间。l        以“视觉上明确”的形式列出当前行。l width  以“视觉上明确”的形式列出当前行,并将其按宽度字符进行拆分。这是 GNU 扩展。n N      将下一行输入读入/追加到模式空间。p        打印当前模式空间。P        打印当前模式空间的第一个嵌入式换行符之前的内容。s/regexp/replacement/
尝试将 regexp 与模式空间匹配。如果匹配成功,则用 replacement 替换匹配到的部分。replacement 可以包含特殊字符 & 来引用模式空间中匹配到的部分,以及特殊转义序列 \1 到 \9 来引用 regexp 中相应的匹配子表达式。
t label        如果自上次读取输入行和上次 t 或 T 命令以来,s/// 执行了成功的替换,则跳转到标签;如果省略标签,则跳转到脚本末尾。
T label如果自上次读取输入行和上次 t 或 T 命令以来,没有 s/// 执行成功的替换,则跳转到标签;如果省略标签,则跳转到脚本末尾。这是 GNU 扩展。
w filename        将当前模式空间写入 filename。W filename        将当前模式空间的第一行写入 filename。这是 GNU 扩展。x        交换保持空间和模式空间的内容。
y/source/dest/    将模式空间中出现在源中的字符转换为目标中对应的字符。

3、常用选项和示例

下面是关于sed的一些常见用法和示例代码:

# 显示文件的部分文本:
# 可以只查看文件的一部分,例如只打印22到29行的内容。
sed -n 22,29p testfile.txt# 显示除某些行之外的所有行:
# 显示除22到29行之外的所有行。
sed 22,29d testfile.txt# 显示从第n行开始的每m行:
# 可以显示从第2行开始的每3行内容。
sed -n '2~3p' file.txt# 删除一行:
# 可以删除指定行号的行。
sed Nd testfile.txt# 若要删除文件的最后一行
sed $d testfile.txt。# 查找和替换:
# 首次替换:将文件中的“danger”替换为“safety”。
sed 's/danger/safety/' testfile.txt# 全局替换:可以完全替换文件中的所有“danger”。
sed 's/danger/safety/g' testfile.txt# 替换特定行上的字符串:
# 替换文件第4行的字符串
sed '4 s/danger/safety/' testfile.txt# 替换文件第4到9行的字符串
sed '4,9 s/danger/safety/' testfile.txt# 在匹配搜索之后或之前添加一行:
# 使用选项a,在每个模式匹配之后添加新行
sed '/danger/a "This is new line with text after match"' testfile.txt# 使用选项i,在每个模式匹配之前添加新行
sed '/danger/i "This is new line with text before match" ' testfile.txt# 运行多个sed命令:
# 如果需要执行多个sed表达式,可以使用选项-e将sed命令链接起来
sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt# 在编辑文件之前进行备份:
# 使用选项-i.bak,sed会在编辑文件之前创建一个备份文件,以防止意外修改导致的数据丢失
sed -i.bak -e 's/danger/safety/g' testfile.txt# 删除以模式开头和结尾的文件行:
# 删除以特定字符串开始并以另一个字符串结束的行
sed -e 's/^danger.*stops$//g' testfile.txt# 附加行:
# 在每行之前添加一些内容
sed -e 's/.*/testing sed &/' testfile.txt# 删除所有注释行和空行
sed -e 's/#.*//;/^$/d' testfile.txt# 从/etc/passwd文件获取所有用户名:
# 获取/etc/passwd文件的所有用户名列表
sed 's/\\([^:]*\\).*/\\1/' /etc/passwd# 防止覆盖系统链接:
使用-i参数时,为了避免破坏链接,请使用follow-symklinks选项
sed -i --follow-symlinks 's/danger/safety/g' testfile.txt

这些示例应该能帮助你更好地理解 sed 命令的用法和功能。先写这多吧,主要还是要多练习,练习的话,用子系统Ubuntu就可以。继续关注我,下期讲讲述awk命令!

 如果您觉得有些用处,欢迎在评论区留言,关注。谢谢您的阅读!

 往期学习笔记:

Windows系统开启Linux子系统(Ubuntu)

Linux常用命令(目录操作命令)

Linux常用命令:文件的创建、复制、移动、查找和删除命令

Linux常用命令:文本文件的查看与编辑

Linux常用命令:文本文件的拼接与分割

Linux常用命令:文件的权限管理

Linux常用命令:文件的下载、压缩与解压

Linux常用命令:常见的操作符

Linux常用命令:系统操作命令
 

 Linux文本处理三剑客:grep

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

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

相关文章

使用Java同步Linux服务器时间

前言 公司客户线上服务器采用的是UOS系统&#xff0c;实施发现系统不会同步时间&#xff0c;并且时间有真实时间有偏差&#xff0c;本意想安装NTP授时服务&#xff0c;结果发现UOS安装NTP都要折腾好久&#xff0c;遂采用Java来曲线救国了。 添加依赖 <dependency><…

Java基于SpringBoot的旅游网站的设计与实现论文

目 录 摘 要 2 Abstract 3 1.1 课题开发的背景 4 1.2 课题研究的意义 4 1.3 研究内容 5 第二章 系统开发关键技术 6 2.1 JSP技术介绍 6 2.2 JAVA简介 6 2.3 MyEclipse开发环境 7 2.4 Tomcat服务器 7 2.5 Spring Boot框架 7 2.6 MySQL数据库 8 第三章 系统分析 9 3.1 系统可行性…

实践航拍小目标检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

使用 llama.cpp 在本地部署 AI 大模型的一次尝试

对于刚刚落下帷幕的2023年,人们曾经给予其高度评价——AIGC元年。随着 ChatGPT 的火爆出圈,大语言模型、AI 生成内容、多模态、提示词、量化…等等名词开始相继频频出现在人们的视野当中,而在这场足以引发第四次工业革命的技术浪潮里,人们对于人工智能的态度,正从一开始的…

JVM(5)

垃圾回收相关 垃圾收集器 警告:纯八股文! 如果说上面我们讲的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体体现. 垃圾收集器的作用:垃圾收集器是为了保证程序能够正常,持久运行的一种技术,它是将程序中不用的死亡对象也就是垃圾对象进行清除,从而保证新的…

第四十五天| 322. 零钱兑换、279.完全平方数

Leetcode 322. 零钱兑换 题目链接&#xff1a;322 零钱兑换 题干&#xff1a;给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能…

AI大语言模型【成像光谱遥感技术】ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

vscode + git

写在前面&#xff1a; origin分支&#xff1a; 当我们在使用git clone的时候&#xff0c;git会自动地将这个远程的repo命名为origin&#xff0c;拉取它所有的数据之后&#xff0c;创建一个指向它master的指针&#xff0c;命名为origin/master&#xff0c;之后会在本地创建一个…

C#单向链表实现:用泛型类在当前位置插入新数据的方法Insert()

一、涉及到的知识点 1.ListNode<T>类 ListNode<T>是一个泛型类&#xff0c;用于表示链表中的一个节点。Value和Next属性是ListNode<T>最基本的属性&#xff0c;用于表示节点的值和指向下一个节点的引用。但是&#xff0c;完全可以根据实际需求添加其他属性&…

双非二本找实习前的准备day5

学习目标&#xff1a; 每天2-3到简单sql&#xff08;刷完即止&#xff09;&#xff0c;每天复习代码随想录上的题目3道算法&#xff08;时间充足可以继续&#xff09;&#xff0c;今天的八股背少一点&#xff0c;MySQL和Redis各1-2道好了&#xff0c;主攻复习是java基础 今日…

C语言5道编程题简单介绍(三)

1、打印杨辉三角 程序分析&#xff1a; 结构如下所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代码如下&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a…

Vuex 是什么?它在 Vue 应用中扮演什么角色?解释一下 Vuex 的状态管理模式。如何在 Vuex 中进行异步操作?

一、Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 的出现解决了多个组件间共享状态的问题&#xff0c;使得状态管理变得更加直…

#WEB前端(HTML属性)

1.实验&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; a: href插入超链接 默认情况下在本窗口打开链接, target可以设置打开的窗口,parent在父窗口打开&#xff0c;blank新开串口打开,top在顶层串口打开,self为默认在本窗口打开 img: 插入图片 可以插…

解析/区分MOS管的三个引脚G、S、D(NMOS管和PMOS管)

MOS管的三个引脚分别是Gate&#xff08;栅极&#xff09;、Source&#xff08;源极&#xff09;和Drain&#xff08;漏极&#xff09;。以下是详细介绍&#xff1a; Gate&#xff08;栅极&#xff09;。这是控制MOS管开关的关键引脚&#xff0c;用于控制电流的流通。Source&…

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

【DDD】学习笔记-实体和值对象:从领域模型的基础单元看系统设计

今天我们来学习 DDD 战术设计中的两个重要概念&#xff1a;实体和值对象。 这两个概念都是领域模型中的领域对象。它们在领域模型中起什么作用&#xff0c;战术设计时如何将它们映射到代码和数据模型中去&#xff1f;就是我们这一讲重点要关注的问题。 另外&#xff0c;在战略…

springboot238光影视频

光影视频平台 摘 要 使用旧方法对光影视频平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在光影视频平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开…

APS面试审核准备的常规问题

之前根据其他人的经验贴&#xff0c;准备了一些可能APS 面试审核可能会遇到的常规问题&#xff0c;现在简单分享一下。 一般会考虑到留学资金来源&#xff0c;在德国能不能顺利毕业&#xff1b;学的是什么专业内容之类的&#xff0c;判断去德国会不会好好学习&#xff1b;对德国…

Linux:上传文件到虚拟机

常见的方法&#xff1a; 使用虚拟机软件提供的文件共享功能&#xff1a; 对于VMware Workstation&#xff0c;可以使用“共享文件夹”功能。对于VirtualBox&#xff0c;可以使用“共享文件夹”或“拖放”功能。 使用网络文件共享服务&#xff1a; 您可以在虚拟机中配置一个Sam…

【Python入门教程】Python实现鸡兔同笼

今天跟大家分享一下很久之前自己做的鸡兔同笼求解问题的小游戏&#xff0c;使用公式和基本的判断语句即可实现&#xff0c;可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路&#xff0c;例如应该套几层循环、分几个模块等等。然后在编码时可以先随意…