运维笔记:流编辑器sed命令用法解析

运维笔记
sed命令用法解析

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139298840
HuaWei:https://bbs.huaweicloud.com/blogs/428252

【介绍】:本文sed命令用法。

在这里插入图片描述


1. sed命令简介

sed(stream editor)是一个强大的文本处理工具,用于对文本流或文件进行过滤和转换。它主要用于自动编辑一个或多个文件;简化对文件的重复操作;编写转换程序等。其语法格式为:

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

其中可选选项([OPTION]部分)包括:

  -n, --quiet, --silent 抑制自动打印模式空间--debug           注释程序执行-e script, --expression=script      将脚本添加到要执行的命令中-f script-file, --file=script-file  将脚本文件的内容添加到要执行的命令中--follow-symlinks               处理时跟随符号链接   -i[SUFFIX], --in-place[=SUFFIX]     就地编辑文件(如果提供了后缀,则制作备份)-l N, --line-length=N    指定 `l' 命令的期望换行长度--posix              禁用所有 GNU 扩展-E, -r, --regexp-extended 在脚本中使用扩展正则表达式(为便于移植,请使用 POSIX -E)。-s, --separate    将文件视为独立的而不是单一的连续长流。--sandbox     在沙盒模式下操作(禁用 e/r/w 命令)。-u, --unbuffered  从输入文件加载最少量的数据并更频繁地刷新输出缓冲区-z, --null-data   以 NUL 字符分隔行--help        显示此帮助信息并退出--version     输出版本信息并退出

如果没有指定 -e--expression-f--file 选项,则第一个非选项参数将被视为要解释的 sed 脚本。所有剩余的参数都是输入文件的名称;如果没有指定输入文件,则读取标准输入。

2. 实际运用举例

2.1 删除文本中的空白行

sed '/^$/d' file.txt

这个命令会显示 file.txt 中所有非空行,不修改原文件。其中,使用正则表达式^$ 匹配空行,即开始和结束之间没有任何字符的行。d 命令用于删除匹配的行。

2.2 文本替换:将所有出现的 “apple” 替换为 “orange”

sed 's/apple/orange/g' file.txt

这个命令会显示替换后的内容,不修改原文件。其中:

  • s 表示替换操作。

  • apple 是要查找的文本。

  • orange 是替换后的文本。

  • g 表示全局替换,即替换每一行中的所有匹配项。

例如当前目录有一个file.text文件为:
在这里插入图片描述
执行该命令后输出结果为:
在这里插入图片描述
可见,文档中所有的“apple”都被替换成了“orange”

2.3 在每行的末尾添加文本

sed 's/$/ end of line/' file.txt

这个命令会在每行的末尾添加 " end of line" 文本,它将显示修改后的内容,不会修改原文件。其中:

  • $ 在正则表达式中表示行的末尾。

例如当前目录有一个file.text文件为:
在这里插入图片描述

执行该命令后输出结果为:

在这里插入图片描述

2.4 打印文件的一些行

sed -n '2,6p' file.txt

这个示例的命令用于显示第 2 行到第 6行的内容。其中:

  • -n 选项与 p 命令一起使用,用于抑制自动打印并只打印指定的行。

  • 2,6 指定了行范围。

例如当前目录有一个file.text文件为:
在这里插入图片描述
执行该命令后输出结果为:

在这里插入图片描述

这不会修改原文件。

2.5 将文件中的所有数字增加 1

sed 's/[0-9]/&1/g' file.txt

这个命令会在每个数字后面添加 1,如 8 变为 81,显示修改后的内容,不修改原文件。其中:

  • 正则 [0-9] 匹配任何单个数字;

  • & 代表匹配到的整个部分(这里是单个数字);

  • &1 表示在匹配到的数字后添加 1;

例如有一个file.text文件为:
在这里插入图片描述
执行该命令后的结果为:
在这里插入图片描述
这不会改变原文件的内容。

2.6 注释掉包含特定文本的行

sed '/apple$/s/^/#/' file.txt

这个命令会在所有包含 “pattern” 的行前添加 #,显示修改后的内容打印,不修改原文件。其中:

  • 正则/apple$/ 查找包含以 “apple” 结尾的行。

  • s/^/#/ 将这些行的开始替换为 “#”,即添加注释。

例如有一个file.text文件为:
在这里插入图片描述
执行该命令后的结果为:
在这里插入图片描述
可见,由于第1行、第3行以“apple”结尾,输出的内容中这两行前面添加了一个“#”号。

2.7 删除文件中的最后一行

sed '$d' file.txt

这个命令会删除 file.txt 的最后一行,显示修改后的内容,不修改原文件。其中:

  • $ 表示文件的最后一行。

  • d 是删除命令。

例如有一个file.text文件为:
在这里插入图片描述
执行该命令后的结果为:
在这里插入图片描述

2.8 将文件中的第一行移动到最后一行

sed '1h;1d;$G' file.txt

这个命令会将第一行移动到文件的最后,显示修改后的内容,不修改原文件。其中:

  • 1h 表示将第一行复制到暂存缓冲区。

  • 1d 表示删除第一行。

  • $G 表示在文件的最后一行后追加暂存缓冲区的内容。

例如有一个file.text文件为:
在这里插入图片描述
执行该命令后的结果为:

在这里插入图片描述

3. 就地编辑

之前给出的示例都不会直接修改文件,但是很多时候我们是希望直接修改文件的。就地编辑是 sed 命令的一个非常有用的功能,允许直接修改文件而不是仅仅输出修改后的结果。这通过 -i 选项实现,可以选择性地指定一个后缀来创建原文件的备份。

3.1 就地编辑示例

例如假设有一个名为 example.txt 的文件,内容如下:

Hello, this is a test file.
This file contains some sample text.
We will replace the word 'sample' with 'example'.

在这里插入图片描述

执行命令:

sed -i 's/sample/example/g' example.txt

这里:

  • -i:表示“就地编辑”,即直接修改原文件而不是输出到标准输出。
  • s:表示替换操作。
  • g:表示全局替换,即在整个文件中进行替换,而不仅仅是每行的第一个匹配项。

修改后的 example.txt 文件内容将变为:

Hello, this is a test file.
This file contains some example text.
We will replace the word 'example' with 'example'.

在这里插入图片描述

可见最后一行的’sample’变成了’example’。

3.2 创建备份并就地编辑

如果你想在修改文件的同时创建一个备份,可以在 -i 选项后添加一个后缀。这个后缀将被用作备份文件的扩展名。

sed -i.bak 's/old_text/new_text/g' file.txt

这个命令不仅会修改 file.txt,还会创建一个名为 file.txt.bak 的备份文件,其中包含原始内容。

继续使用上面的 example.txt 文件:

Hello, this is a test file.
This file contains some sample text.
We will replace the word 'sample' with 'example'.

执行命令:

sed -i.bak 's/example/sample/g' example.txt

这将把文件中的 “example” 替换回 “sample”,并创建一个包含修改前内容的备份文件 example.txt.bak。其中:

  • -i.bak:表示“就地编辑”,并指定 .bak 作为备份文件的后缀。这意味着在修改原文件之前,sed 会先将原文件 example.txt 复制一份,命名为 example.txt.bak

    • s:表示替换操作。

    • example:这是要被替换的文本模式,即查找文本中所有出现的 “example”。

    • sample:这是替换后的文本,即将找到的 “example” 替换为 “sample”。

    • g:表示全局替换,即在整个文件中进行替换,而不仅仅是每行的第一个匹配项。

修改后的 example.txt 文件内容将变为:

Hello, this is a test file.
This file contains some sample text.
We will replace the word 'sample' with 'sample'.

备份文件 example.txt.bak 的内容为:

Hello, this is a test file.
This file contains some example text.
We will replace the word 'example' with 'example'.

4. 结论与应用

sed 是一个极其强大的流编辑器,它允许我们通过简单的命令行操作来执行复杂的文本处理任务。无论是进行简单的文本替换、删除特定行、还是更复杂的文本操作,sed 都能提供高效且灵活的解决方案。通过上述示例,我们可以看到 sed 在处理各种文本编辑任务时的实用性和便捷性。

  • 自动化处理sed 可以用于脚本中,自动化处理大量文件,减少重复劳动。例如,编写一个Dockerfile时,我们可以使用sed来完成文本就地编辑工作:

    RUN sed -i 's/# DBPassword=/DBPassword=zabbix/g' /etc/zabbix/zabbix_server.conf
    

    其中:

    • -i:这个选项告诉 sed 直接修改文件,而不是输出修改后的内容到标准输出。这称为“就地编辑”;

    • 's/# DBPassword=/DBPassword=zabbix/g':这是一个 sed 的替换命令,具体包含以下部分:

      • s:表示进行替换操作。
      • # DBPassword=:这是要被替换的文本模式,即查找以 # DBPassword= 开头的文本。这通常表示该行是被注释的。
      • DBPassword=zabbix:这是替换后的文本,即将找到的文本替换为 DBPassword=zabbix。这个操作实际上是取消注释并设置数据库密码为 zabbix`;
      • g:表示全局替换,即在整个文件中进行替换,而不仅仅是每行的第一个匹配项。
    • /etc/zabbix/zabbix_server.conf:这是要修改的文件路径。

  • 文本分析:可以快速修改或提取文件中的数据,对于日志分析、数据抽取等场景尤为有用。

  • 编程辅助:对源代码进行批量修改,如批量添加注释、修改变量名等。

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

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

相关文章

Matlab 结构光相移法(单频多相)

文章目录 一、简介1、基于点的测距2、基于条纹的测距二、条纹编码2.1 二进制编码2.2相移法三、实现代码参考文献一、简介 在介绍相移法之前,我们需要先了解一下为啥会有相移法,了解了其来龙去脉,则更容易去应用它。 1、基于点的测距 首先我们从点的测距开始,这有点类似于立…

每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/ 这道题与我之前发布的题目116是一样的解题过程,只是本题所给的数组大小与116不同,这是需要注意的。 116题目链接: http://t.csdnimg.cn/3Ub02 struct Node* c…

RAID配置实战

概念 raid磁盘阵列:可以用不同的硬盘分区,组成一个逻辑上的硬盘。具有高可用 raid级别: raid0 :条带化存储:数据分散在多个物理硬盘上的存储方式。利用多个磁盘并行读取和写入。存储性能和读写性能是最好的。没有冗…

端到端目标检测 |从DETR 到 GroundingDINO

文章目录 一,DETR1. 简介2. 亮点3. 细节4. 总结一下 二,GroundingDINOGrounding DINO的整体流程Grounding DINO的目标函数 一,DETR 之前的目标检测框架,需要很多的人工干预,很多的先验知识,而且可能还需要…

Pandas格式化DataFrame的浮点数列

在呈现数据的同时,以所需的格式显示数据也是一个重要而关键的部分。有时,值太大了,我们只想显示其中所需的部分,或者我们可以说以某种所需的格式。 让我们看看在Pandas中格式化DataFrame的数值列的不同方法。 例1:将…

DNSlog环境搭建

阿里云域名公网VPS地址 购买阿里云域名后设置“自定义DNSHOST” DNS服务器填写ns1和ns2 如:ns1.aaa.com IP地址填写你的VPS地址 如:1.1.1.1 填写解析记录,一个A记录、一个NS记录 NS记录就是*.域名指向记录值ns1.域名 如:*.aaa…

服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程

服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程。 一、问题概述 服务器远程桌面无法连接是日常运维中常见的问题之一。它可能由多种原因造成,如网络问题、服务器配置错误、远程桌面服务未启动等。本教程将指导您逐步排查并解决这些问题。…

计算机算法中的数字表示法——原码、反码、补码

目录 1.前言2.研究数字表示法的意义3.数字表示法3.1 无符号整数3.2 有符号数值3.3 二进制补码(Twos Complement, 2C)3.4 二进制反码(也称作 1 的补码, Ones Complement, 1C)3.5 减 1 表示法(Diminished one System, D1)3.6 原码、反码、补码总结 1.前言 昨天有粉丝让我讲解下定…

手推车式电缆故障定位系统

武汉凯迪正大一体化电缆故障高压发生器用于测试各种型号的380V,600V,10kV,35kV,110kV,220kV,380kV电压等级的铜铝芯电力电缆、同轴通信电缆和市话电缆的各类故障,如电缆全长、开路、短路、断线、低阻故障、高阻故障、高阻泄露、高低阻抗接地、接地故障、铠装接地故障…

工控一体机7寸显示器电容触摸屏(YR07JK)产品规格说明书

如果您对工控一体机有任何疑问或需求,或者对如何集成工控一体机到您的业务感兴趣,可移步控芯捷科技。 一、硬件功能介绍 1.1 YR07JK介绍 YR07JK工控机是我公司推出的一款新型 Cortex-A17 架构,主频达1.8GHz、具有高性能低能耗的工业控制板卡…

甩掉接口文档烦恼!Spring Boot 集成 Knife4j,轻松玩转 API 可视化

一、引言:跟接口文档说拜拜 👋 作为一名 Java 开发者,你是否还在为编写繁琐的 API 文档而头疼?传统的手动编写方式不仅耗时费力,而且容易出错,难以维护。今天,我们就来介绍一款神器 Knife4j&am…

win10双网卡如何同时上内网和外网?

win10双网卡如何同时上内网和外网? Chapter1 win10双网卡如何同时上内网和外网?Chapter2 网络基础--win10双网卡设置成访问不同的网络 Chapter1 win10双网卡如何同时上内网和外网? 原文链接:https://www.jb51.net/os/win10/806585.html 场景:很多办…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

QT7_视频知识点笔记_67_项目练习(页面以及对话框的切换,自定义数据类型,DB数据库类的自定义及使用)

视频项目:7----汽车销售管理系统(登录,品牌车管理,新车入库,销售统计图表)-----项目视频没有,代码也不全,更改项目练习:学生信息管理系统。 学生信息管理系统&#xff1…

大模型助力企业提效,九章云极DataCanvas公司联合腾讯搜狗输入法发布私有化解决方案

近日,九章云极DataCanvas公司与腾讯搜狗输入法的合作再次升级。在搜狗输入法开发者中心正式推出之际,九章云极DataCanvas公司作为搜狗输入法的首批开发合作伙伴,双方联合发布“企业知识管理助手”私有化解决方案。 “企业知识管理助手”整体私…

Facebook的魅力:数字时代的社交热点

在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的巨头,一直以其独特的魅力吸引着全球数十亿用户。本文将深入探讨Facebook的魅力所在,以及它在数字时代的社交热点。 1. 社交网络的霸主&…

对于高速信号完整性,一块聊聊啊(17)

再来对前仿和后仿的仿真内容回顾一下: 从概念上有个根本的理解 前仿真又可以分为布局前仿真和布局后仿真。前者是在设计的最初阶段,建立和验证详细的电气拓扑结构并以此制定出详细的约束规则。后者是在布局完成的状态下,在布线过程中遇到的…

MATLAB分类与判别模型算法:基于LVQ神经网络的乳腺肿瘤诊断分类程序【含Matlab源码 MX_003期】

说明 实现基于LVQ(Learning Vector Quantization,学习向量量化)神经网络的乳腺肿瘤诊断分类任务。LVQ是一种监督学习算法,通常用于模式识别和分类任务。 算法思路介绍: 导入数据: 加载名为"data.mat&…

SSL证书申请需要多久?

SSL证书作为一种重要的网络安全工具,能够确保网站数据传输的安全,保护用户隐私和企业数据不受侵害。本文将详细介绍SSL证书的申请流程以及所需时间,帮助用户更好地规划和实施网络安全策略。 SSL证书,也称为TLS证书或HTTPS证书&am…

好用的国产大文件传输软件有哪些,快来看看吧

在这个数字化飞速发展的时代,我们每天都在与各种文件打交道,从简单的文档到庞大的视频素材,文件的体积越来越大,传统的文件传输方式逐渐显得力不从心。面对这个挑战,大文件传输软件应运而生,它们不仅解决了…