云计算大数据——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

root@localhost \~# sed -n '/^PI/p' demo //输出以PI 开头的行

PI=3.141592653589793238462643383249901429

root@localhost \~# sed -n '/0-9$/p' demo //输出以数字结尾的行

PI=3.141592653589793238462643383249901429

root@localhost \~# sed -n '/<wood>/p' demo //输出包含单词wood 的行,<、>代表单

词边界

.3.2 删除符合条件的文本(d)

下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果

root@localhost \~# nl demo | sed '3,5d' //删除第 3~5 行

root@localhost \~# nl demo |sed '/cross/d' //删除匹配所有包含 cross 的行。

root@localhost \~# sed '/[1](#1)/d' demo //删除以小写字母开头的行

root@localhost \~# sed '/.$/d' demo //删除以"."结尾的行

root@localhost \~# sed '/^$/d' demo //删除所有空行

注 意 : 若 是 删 除 重 复 的 空行 , 即 连 续 的 空 行 只 保 留 一 个 , "cat -s demo"。

.

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


sed 's/o//g' demo //将文件中的所有o 删除(替换为空串)

sed 's/^/#/' demo //在每行行首插入#号

sed '/the/s/^/#/' demo //在包含the 的每行行首插入#号


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

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 行后

sed '/the/w out.file' demo //将包含the 的行另存为文件 out.file

sed '/the/r /etc/hostname' demo //将文件/etc/hostname 的内容添加到包含 the 的每行以后

sed '3aNew' demo //在第 3 行后插入一个新行,内容为New

sed '/the/aNew' demo //在包含the 的每行后插入一个新行,内容为 New

sed '3aNew1\nNew2' demo //在第 3 行后插入多行内容,中间的\n 表示换行

总结

掌握 sed 需重点理解其逐行处理的流程和两个空间的协作逻辑,通过实践不同场景的脚本编写(如正则匹配优化、多命令组合),可充分发挥其在文本自动化处理中的价值。


  1. a-z ↩︎
相关推荐
Bode_200218 小时前
基于大数据分析的全生命周期质量追溯质量评估体系落地方案
大数据·人工智能
serve the people18 小时前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins
一个儒雅随和的男子19 小时前
Elasticsearch出现深度分页问题怎么解决?
大数据·elasticsearch·搜索引擎
AI智图坊20 小时前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc
jerryinwuhan21 小时前
面向产业带与中小企业数字化转型的电商运营人才培养模式
大数据·人工智能
Fnetlink11 天前
企业SDWAN供应商
大数据
galaxylove1 天前
Gartner发布创新洞察:AI SOC智能体加速通信运营商安全运营转型
大数据·人工智能·安全
甩手网软件1 天前
Shopee2026新规:费率重构与履约收紧下,卖家如何破局?
大数据·人工智能
lizhihai_991 天前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
ha_lydms1 天前
AnalyticDB分区、分布键性能优化
android·大数据·分布式·性能优化·分布式计算·分区·analyticdb