云计算大数据——shell教程(三剑客之sed)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、sed基本定义
    • [1.1 sed 工具的定义与核心作用](#1.1 sed 工具的定义与核心作用)
    • [1.2 sed 工具的工作流程](#1.2 sed 工具的工作流程)
  • [二、sed 命令的常见用法](#二、sed 命令的常见用法)
    • [2.1 sed 命令的基本格式](#2.1 sed 命令的基本格式)
    • [2.2 sed 命令的常用选项](#2.2 sed 命令的常用选项)
    • [2.3 sed 命令的操作类型](#2.3 sed 命令的操作类型)
  • [三、sed 工具的用法示例](#三、sed 工具的用法示例)
    • [3.1 输出符合条件的文本(p 表示正常输出)](#3.1 输出符合条件的文本(p 表示正常输出))
    • [.3.2 删除符合条件的文本(d)](#.3.2 删除符合条件的文本(d))
    • [3.3 替换符合条件的文本](#3.3 替换符合条件的文本)
    • [3.4 迁移符合条件的文本](#3.4 迁移符合条件的文本)
  • 总结

前言

sed(Stream Editor,流编辑器)是类 Unix 系统中一款功能强大的文本处理工具,它以逐行处理的方式对文本流进行编辑操作,广泛应用于文本批量替换、内容筛选、格式转换等场景。与交互式编辑器(如 vim)不同,sed 更擅长自动化、脚本化的文本处理任务,常与管道(|)、其他命令(如 grep、awk)配合,构建高效的文本处理流水线。

其核心工作机制围绕 "模式空间"(Pattern Space)和"保留空间"(Hold Space) 展开:文本行先被读入模式空间,sed 按照脚本指令(或命令行参数)对模式空间中的内容进行匹配、编辑,处理完成后将结果输出(或根据规则暂存至保留空间),整个过程是流式的,无需加载整个文件到内存,因此即使处理大文件也能保持高效。

一、sed基本定义

1.1 sed 工具的定义与核心作用

sed(Stream EDitor)是一款高效易用的文本处理工具。它以逐行方式读取文本,根据用户定义的规则执行查找替换、删除、插入等编辑操作,并输出处理结果。

1.2 sed 工具的工作流程

sed 的工作流程主要包括以下三个步骤:

读取 :从输入流(文件、管道或标准输入)中读取一行内容,存入临时的缓冲区中,又称之模式空间(pattern space)。
执行 :默认情况下,所有 sed 命令按顺序在模式空间中执行,除非指定了行地址。

**显示:**将处理后的内容发送到输出流,随后清空模式空间。

该过程会重复执行,直到所有内容处理完毕。

二、sed 命令的常见用法

2.1 sed 命令的基本格式

sed 命令有两种常用调用格式:

css 复制代码
sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数

其中,参数 表示目标文件,多个文件时用逗号分隔;scriptfile 是脚本文件,需使用 -f 选项指定。

当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。

2.2 sed 命令的常用选项

e 或 --expression=:指定命令或脚本处理输入的文本文件

-f 或 --file=:指定脚本文件处理文本

-h 或 --help:显示帮助信息

-n、--quiet 或 silent:仅显示处理后的结果,取消默认输出

-i.bak:直接编辑文件,并备份原文件

-r、-E:使用扩展正则表达式

-s:将多个文件视为独立文件,而非连续流

2.3 sed 命令的操作类型

"操作"用于指定对文件操作的动作行为,也就是 sed 的命令。操作符通常格式为 [n1[,n2]]动作,其中 n1、n2 为可选行号。常见操作包括:

a:在当期行下方添加一行

c:替换选定行

d:删除选定行

i:在选定行上方插入一行

p:打印内容,常与 -n 联用

s:替换指定字符

y:字符转换

n:读取下一行到模式空间(跳过当前行)。

g:全局替换(每行所有匹配项)

三、sed 工具的用法示例

在本小节中依旧以 test.txt文件为例进行演示。

3.1 输出符合条件的文本(p 表示正常输出)

root@localhost \~\]# sed -n '/the/p' demo //输出包含the 的行 \[root@localhost \~\]# sed -n '4,/the/p' demo //输出从第 4 行至第一个包含 the 的行 \[root@localhost \~\]# sed -n '/the/=' demo //输出包含the 的行所在的行号,等号(=)用来输出行号 4 5 6 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4ee7e1b9fb5f4aeaad23816d7e9c0820.png) \[root@localhost \~\]# sed -n '/\^PI/p' demo //输出以PI 开头的行 PI=3.141592653589793238462643383249901429 \[root@localhost \~\]# sed -n '/\[0-9\]$/p' demo //输出以数字结尾的行 PI=3.141592653589793238462643383249901429 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cc20744883944e72a9282a9b59713c7a.png) \[root@localhost \~\]# sed -n '/\/p' demo //输出包含单词wood 的行,\<、\>代表单 词边界 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/396f91e7a0b74524a2569f69fe175f11.png) ### .3.2 删除符合条件的文本(d) 下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果 \[root@localhost \~\]# nl demo \| sed '3,5d' //删除第 3\~5 行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e2f4432db31a4c83b63b896d356470c7.png) \[root@localhost \~\]# nl demo \|sed '/cross/d' //删除匹配所有包含 cross 的行。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1d83ed7b85454fbb9904f8837c725aa3.png) \[root@localhost \~\]# sed '/^[1](#1)^/d' demo //删除以小写字母开头的行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/aba86346dff34817b1cf55d93efb2107.png) \[root@localhost \~\]# sed '/.$/d' demo //删除以"."结尾的行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/026e43164ed44240a474b8c859bccc74.png) \[root@localhost \~\]# sed '/\^$/d' demo //删除所有空行 注 意 : 若 是 删 除 重 复 的 空行 , 即 连 续 的 空 行 只 保 留 一 个 , "cat -s demo"。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/895ac92eaad04803a9a363a5ae0e6e47.png) . ### 3.3 替换符合条件的文本 s(字符串替换)、c(整行/整块替换)、y(字符转换) sed 's/the/THE/' demo //将每行中的第一个the 替换为 THE sed 's/l/L/2' demo //将每行中的第 2 个 l 替换为 L sed 's/the/THE/g' demo //将文件中的所有the 替换为 THE ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/67c8bb7f6a5c4f1e88ce78bf931df71f.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f947acbb886141f3bb4abfe831b92bd1.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f670d4dc02c94c5894ab5923d2e057e7.png) sed 's/o//g' demo //将文件中的所有o 删除(替换为空串) sed 's/\^/#/' demo //在每行行首插入#号 sed '/the/s/\^/#/' demo //在包含the 的每行行首插入#号 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9b0db6fc3dae494484903a0959152115.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/91f6c91fe0034718b8485769e4602707.png) sed 's/$/EOF/' demo //在每行行尾插入字符串EOF sed '3,5s/the/THE/g' demo //将第 3\~5 行中的所有 the 替换为 THE sed '/the/s/o/O/g' demo //将包含the 的所有行中的 o 都替换为 O ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f1988bb516884adeb4d4f045b77abe7a.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/04384a1f63e14bbc91696612697d2125.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/221d20787f5b403084bf9fe834cb0bc7.png) ### 3.4 迁移符合条件的文本 H:复制到剪贴板; g、G:将剪贴板中的数据覆盖/追加至指定行; w:保存为文件; r:读取指定文件; a:追加指定内容。具体操作方法如下所示。 I,i 忽略大小 sed '/the/{H;d};$G' demo //将包含the 的行迁移至文件末尾,{;}用于多个操作 sed '1,5{H;d};17G' demo //将第 1\~5 行内容转移至第 17 行后 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/da59b8b9c0a74ac0aa505aad5f40b816.png) sed '/the/w out.file' demo //将包含the 的行另存为文件 out.file sed '/the/r /etc/hostname' demo //将文件/etc/hostname 的内容添加到包含 the 的每行以后 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0aeb4dd5ea0746f58ce7b6e3496df8c6.png) sed '3aNew' demo //在第 3 行后插入一个新行,内容为New sed '/the/aNew' demo //在包含the 的每行后插入一个新行,内容为 New sed '3aNew1\\nNew2' demo //在第 3 行后插入多行内容,中间的\\n 表示换行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a9a3c60e2d3d4de88d4f43394562413c.png) ## 总结 掌握 sed 需重点理解其逐行处理的流程和两个空间的协作逻辑,通过实践不同场景的脚本编写(如正则匹配优化、多命令组合),可充分发挥其在文本自动化处理中的价值。 *** ** * ** *** 1. a-z [↩︎](#↩︎)

相关推荐
小高学习java2 小时前
Canal、Elasticsearch、RabbitMq构建高可用、高性能的异构数据同步方案(亲测可用!!!!)
大数据·elasticsearch·rabbitmq·java-rabbitmq
_OP_CHEN2 小时前
算法基础篇:(十二)基础算法之倍增思想:从快速幂到大数据运算优化
大数据·c++·算法·acm·算法竞赛·倍增思想
武子康3 小时前
大数据-159 Apache Kylin Cube 实战:Hive 装载与预计算加速(含 Cuboid/实时 OLAP,Kylin 4.x)
大数据·后端·apache kylin
lisw053 小时前
边缘计算与云计算!
大数据·人工智能·机器学习·云计算·边缘计算
森语林溪3 小时前
数据“洪灾”变“水利”——古人“格物致知”的大数据实践
大数据
Hello.Reader4 小时前
Flink CDC 用 Db2 CDC 实时同步数据到 Elasticsearch
大数据·elasticsearch·flink
老蒋新思维4 小时前
创客匠人 2025 高峰论谈(11.22-25):AI 智能体重构创始人 IP 打造与知识变现的管理逻辑
大数据·网络·人工智能·网络协议·tcp/ip·重构·知识付费
TDengine (老段)6 小时前
TDengine 字符串函数 TO_BASE64 用户手册
android·大数据·服务器·物联网·时序数据库·tdengine·涛思数据
啊吧怪不啊吧6 小时前
算法王冠上的明珠——动态规划之斐波那契数列问题
大数据·算法·动态规划