从入门到实战:Linux sed命令全攻略,文本处理效率翻倍

从入门到实战:Linux sed命令全攻略,文本处理效率翻倍

文章目录

  • 从入门到实战:Linux sed命令全攻略,文本处理效率翻倍
    • 一、认识sed:什么是流编辑器?
    • 二、吃透sed工作原理:为什么它能高效处理文本?
    • 三、sed基础用法:命令格式与核心选项
      • 3.1 核心选项解析
      • 3.2 核心操作指令
    • 四、sed实战演练:从基础到进阶案例
      • 4.1 文本查看:精准输出指定内容(p指令)
      • 4.2 文本删除:批量清理无用内容(d指令)
      • 4.3 文本替换:批量修改内容(s/c/y指令)
        • 4.3.1 s指令:字符串替换(最常用)
        • 4.3.2 c指令:整行替换
        • 4.3.3 y指令:字符转换(按位置一一对应)
      • 4.4 文本迁移:插入、追加与保存(a/i/w/r指令)
        • 4.4.1 插入/追加(i/a指令)
        • 4.4.2 保存/读取(w/r指令)
      • 4.5 多行处理:保留空间的应用(H/G指令)
      • 4.6 脚本批量处理:多指令集成(-f选项)
    • 五、生产环境实战:sed的高频应用场景
      • 5.1 修改网络配置:设置IP地址
      • 5.2 调整Apache配置:修改监听地址与端口
      • 5.3 配置vsftpd服务:禁止匿名登录
      • 5.4 提取网卡IP地址:结合管道与正则
    • 六、sed使用注意事项
    • 总结

在Linux系统中,文本处理是日常工作中绕不开的环节。无论是分析日志、修改配置文件,还是批量处理数据,都需要高效的文本编辑工具。sed命令作为一款流编辑器,凭借其强大的批量处理能力和灵活的脚本支持,成为了Linux运维、开发人员的必备工具。本文将从sed的基本概念出发,循序渐进讲解其原理、用法,并通过实战案例展示其在生产环境中的应用,助你轻松掌握这一高效文本处理利器。

一、认识sed:什么是流编辑器?

sed全称为“Stream Editor”(流编辑器),它与传统的交互式编辑器(如vi)不同,不直接打开文件进行交互式编辑,而是通过脚本指令对输入的文本流(文件、管道、标准输入等)进行逐行处理

其核心价值在于:

  • 自动化处理:可通过脚本实现重复、繁琐的文本编辑操作自动化,避免人工逐行修改的低效与失误。
  • 批量处理:支持同时处理单个或多个文件,轻松实现大规模文本的统一修改。
  • 管道集成:可与Linux其他命令(如grep、cat、ifconfig等)通过管道结合,构建强大的文本处理流水线。

二、吃透sed工作原理:为什么它能高效处理文本?

想要灵活运用sed,必须先理解其底层工作流程。sed的核心是“模式空间”(Pattern Space)——一个临时缓冲区,所有编辑操作都在其中进行,默认不会修改原文件(除非主动指定)。其完整工作流程可分为读取、执行、显示三个循环步骤:

  1. 读取(Read):从输入流中读取一行文本,存储到模式空间中,清空模式空间原有内容。
  2. 执行(Execute):按照指定的脚本指令,对模式空间中的文本进行匹配和编辑。若未指定行地址,指令将作用于所有行;若指定了行地址,仅匹配的行会被处理。
  3. 显示(Print):将模式空间中处理后的文本输出到输出流(默认是屏幕),随后清空模式空间。

重复以上三步,直到输入流中的所有行都处理完毕。

关键注意点:默认情况下,sed仅修改模式空间中的内容,原文件保持不变。若需修改原文件,需使用-i选项(建议先备份,如-i.bak会保留原文件为.bak备份)。

三、sed基础用法:命令格式与核心选项

sed的命令格式主要有两种,分别适用于简单指令和复杂脚本场景:

# 1. 直接指定指令处理文本
sed [选项] '操作' 文件名/输入流
# 2. 通过脚本文件处理文本(适用于多指令场景)
sed [选项] -f 脚本文件 文件名/输入流

3.1 核心选项解析

sed的选项用于控制处理方式,常用选项如下表所示:

选项英文全称功能说明
-e–expression允许在同一命令中指定多个编辑指令(多指令处理)
-n–quiet/silent取消默认输出(仅输出经过编辑指令处理后的内容)
-f–file从指定的脚本文件中读取编辑指令
-i–in-place直接修改原文件(危险!建议搭配备份,如-i.bak
-r/-E–regexp-extended使用扩展正则表达式(无需对`()、{}、
-s–separate将多个文件视为独立文件处理,而非连续的文本流
-h–help显示帮助信息

3.2 核心操作指令

sed的“操作”由“行地址”和“动作指令”组成,格式为[n1[,n2]]动作,其中n1,n2指定作用的行范围(可选),动作指定具体编辑操作。常用动作指令如下:

动作功能说明
p打印模式空间中的内容,常与-n搭配(避免重复输出)
d删除模式空间中的匹配行
s字符串替换,格式为s/被替换内容/替换内容/[选项](选项:g-全局替换;n-第n次匹配替换)
a在匹配行下方插入指定内容
i在匹配行上方插入指定内容
c用指定内容替换匹配的整行
y字符转换,格式为y/原字符集/目标字符集/(按位置一一对应转换)
H将匹配行复制到“保留空间”(临时缓存,用于多行处理)
G将保留空间的内容追加到模式空间
w将匹配行写入指定文件
r读取指定文件的内容,追加到匹配行之后

四、sed实战演练:从基础到进阶案例

以下案例均以demo文件为测试对象(内容如下),带你逐步掌握sed的核心用法:

1. Hello, the world!
2. This is a test file.
3. He was short and fat.
4. A wood cross!
5. PI=3.141592653589793238462643383249901429
6. Misfortunes never come alone/single.
7. 
8. linux is great!

4.1 文本查看:精准输出指定内容(p指令)

p指令用于打印文本,需配合-n选项(否则会重复输出默认内容),常用于筛选特定行或匹配内容。

案例命令说明
输出所有行sed -n 'p' demo等同于cat demo
输出第3行sed -n '3p' demo仅打印第3行
输出3-5行sed -n '3,5p' demo打印连续行(3到5行)
输出奇数行sed -n 'p;n' demon表示“读取下一行”,先打印当前行再读下一行,实现奇数行输出
输出偶数行sed -n 'n;p' demo先读下一行,再打印,实现偶数行输出
输出含“the”的行sed -n '/the/p' demo按内容匹配(正则),打印含“the”的行
输出以“PI”开头的行sed -n '/^PI/p' demo正则匹配行首,^表示行首
输出以数字结尾的行sed -n '/[0-9]$/p' demo正则匹配行尾,$表示行尾
输出含“wood”单词的行sed -n '/\<wood\>/p' demo\<\>表示单词边界,避免匹配“woood”等

4.2 文本删除:批量清理无用内容(d指令)

d指令用于删除匹配的行,注意:默认不修改原文件,仅输出删除后的结果;若需修改原文件,加-i选项。

案例命令说明
删除第3行sed '3d' demo输出删除第3行后的所有内容
删除3-5行sed '3,5d' demo删除连续行
删除含“cross”的行sed '/cross/d' demo删除匹配内容的行
删除以小写字母开头的行sed '/^[a-z]/d' demo正则匹配行首小写字母
删除以“.”结尾的行sed '/\.$/d' demo.是特殊字符,需转义\
删除空行sed '/^$/d' demo^$匹配空行

4.3 文本替换:批量修改内容(s/c/y指令)

替换是sed最常用的功能,核心是s指令(字符串替换),c(整行替换)和y(字符转换)为辅助。

4.3.1 s指令:字符串替换(最常用)

格式:s/被替换内容/替换内容/[选项],选项包括g(全局替换)、n(第n次匹配替换)。

  • 替换每行第一个“the”为“THE”:sed 's/the/THE/' demo
  • 替换每行第二个“l”为“L”:sed 's/l/L/2' demo
  • 全局替换所有“the”为“THE”:sed 's/the/THE/g' demo
  • 删除所有“o”(替换为空):sed 's/o//g' demo
  • 3-5行全局替换“the”为“THE”:sed '3,5s/the/THE/g' demo
  • 给含“the”的行首加#(注释):sed '/the/s/^/#/' demo
  • 给每行行尾加“EOF”:sed 's/$/EOF/' demo
4.3.2 c指令:整行替换
  • 将第3行替换为“Third line is replaced!”:sed '3c Third line is replaced!' demo
  • 将含“PI”的行替换为“圆周率:3.1415”:sed '/PI/c 圆周率:3.1415' demo
4.3.3 y指令:字符转换(按位置一一对应)
  • 将“abc”转换为“ABC”:echo "abc123" | sed 'y/abc/ABC/'(输出“ABC123”)

4.4 文本迁移:插入、追加与保存(a/i/w/r指令)

4.4.1 插入/追加(i/a指令)
  • 在第3行前插入“Insert before line 3”:sed '3i Insert before line 3' demo
  • 在第3行后插入“Insert after line 3”:sed '3a Insert after line 3' demo
  • 在含“the”的行后插入多行内容:sed '/the/a New1\nNew2' demo\n表示换行)
4.4.2 保存/读取(w/r指令)
  • 将含“the”的行保存到out.txtsed '/the/w out.txt' demo
  • /etc/hostname内容追加到含“the”的行后:sed '/the/r /etc/hostname' demo

4.5 多行处理:保留空间的应用(H/G指令)

sed的“保留空间”(Hold Space)是另一个临时缓冲区,用于暂存多行内容,配合H(复制到保留空间)和G(追加到模式空间)实现多行迁移。

  • 将含“the”的行迁移到文件末尾:sed '/the/{H;d};$G' demo{H;d}表示“复制到保留空间后删除当前行”,$G表示“在最后一行后追加保留空间内容”)
  • 将1-5行迁移到第7行后:sed '1,5{H;d};7G' demo

4.6 脚本批量处理:多指令集成(-f选项)

当需要执行多个指令时,可将指令写入脚本文件,通过-f调用,更易维护。

  1. 创建脚本文件opt.sed
    # 指令1:删除空行
    /^$/d
    # 指令2:全局替换“the”为“THE”
    s/the/THE/g
    # 指令3:给第3行前插入注释
    3i # This is line 3
    
  2. 执行脚本:sed -f opt.sed demo

五、生产环境实战:sed的高频应用场景

sed在生产环境中常用于配置文件修改、日志分析、批量处理等场景,以下为典型案例。

5.1 修改网络配置:设置IP地址

需求:将ens33网卡的IP地址修改为192.168.10.100,配置文件为/etc/sysconfig/network-scripts/ifcfg-ens33

# 使用-i.bak备份原文件,避免失误无法恢复
sed -i.bak 's/^IPADDR=.*/IPADDR=192.168.10.100/' /etc/sysconfig/network-scripts/ifcfg-ens33
  • 解析:^IPADDR=.*匹配“IPADDR=”开头的行,.*表示任意字符,替换为指定IP。

5.2 调整Apache配置:修改监听地址与端口

需求:将Apache的监听地址改为192.168.10.100,端口改为8080,配置文件为/etc/httpd/conf/httpd.conf

# 修改监听地址和端口
sudo sed -i 's/^Listen .*/Listen 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf
# 修改ServerName
sudo sed -i 's/^ServerName .*/ServerName 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf

5.3 配置vsftpd服务:禁止匿名登录

需求:编写脚本,禁止vsftpd匿名登录,允许本地用户登录并写入。

#!/bin/bash
# 脚本名:config_vsftpd.sh
# 1. 定义路径
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFIG="/etc/vsftpd/vsftpd.conf"# 2. 备份原配置(若未备份)
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak# 3. 基于样本配置修改:禁止匿名登录,允许本地用户及写入
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG# 4. 若没有listen配置,添加到文件末尾
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG# 5. 重启服务并设置开机自启
systemctl restart vsftpd
systemctl enable vsftpd

执行脚本:chmod +x config_vsftpd.sh && ./config_vsftpd.sh

5.4 提取网卡IP地址:结合管道与正则

需求:从ifconfig ens33的输出中提取IP地址。

ifconfig ens33 | sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
  • 解析:
    • 2s:作用于第2行(ifconfig输出中IP通常在第2行);
    • .*inet ([0-9.]+) .*:正则匹配“inet ”后的IP地址([0-9.]+匹配IP,()分组提取);
    • \1:引用分组1的内容(即IP地址);
    • -r:使用扩展正则,无需转义()-n:取消默认输出,仅打印匹配结果。

六、sed使用注意事项

  1. 原文件保护:使用-i修改原文件前,务必先备份(如-i.bak),避免误操作导致数据丢失。
  2. 正则转义:默认情况下sed使用基础正则,()、{}、|等特殊字符需转义(如\();若使用-r/-E选项,可直接使用扩展正则,无需转义。
  3. 行地址范围n1,n2表示“从n1到n2行”,n1~n2表示“从n1行开始,每隔n2行”(如1~2表示奇数行)。
  4. 多指令分组:对同一行执行多个指令时,可使用{指令1;指令2;...}分组(如sed '/root/{s/root/ROOT/;s/x/X/g}' /etc/passwd)。

总结

sed作为Linux下的流编辑器,凭借“逐行处理+脚本驱动”的特性,在文本批量处理场景中效率远超交互式编辑器。本文从原理到实战,覆盖了sed的核心用法与生产场景,掌握这些内容后,你可以轻松应对日志分析、配置修改、数据清洗等常见任务。

sed的功能远不止于此,结合正则表达式和脚本编程,还能实现更复杂的文本处理逻辑。建议多动手练习,根据实际需求灵活组合指令,逐步提升文本处理效率!

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

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

相关文章

TIOBE 8月编程语言榜深度解析:Python占比突破26%,Perl成最大黑马

根据TIOBE最新发布的2025年8月编程语言排行榜&#xff0c;一场静默的技术变革正在上演&#xff1a;Python以26.14%的占比首次突破26%大关&#xff0c;连续12个月稳居榜首。这一数据不仅刷新了Python自身的历史纪录&#xff0c;更成为TIOBE指数自2001年创立以来的最高单语言占比…

从发现到恢复,看瑞数信息如何构建“抗毁重构”实战路径

在信息化社会&#xff0c;“韧性”“弹性”这些词汇常被用来形容系统抵御和应对风险的能力&#xff0c;但对于身处关键基础设施行业的运营者来说&#xff0c;这些概念往往过于抽象&#xff0c;难以直接指导实践。 相比之下&#xff0c;“抗毁重构”更具画面感。它不仅是一个管理…

深入理解 jemalloc:从内存分配机制到技术选型

在高性能服务&#xff08;如数据库、缓存、JVM&#xff09;的底层优化中&#xff0c;内存分配效率直接影响系统整体性能。本文将从操作系统底层的malloc机制切入&#xff0c;详解 jemalloc 的设计理念、开源应用场景、实战案例&#xff0c;技术选型分析 一、操作系统底层的内存…

websoket使用记录

1.项目使用记录1.医疗项目中渲染回收柜温湿度&#xff0c;需要实时更新2.回收柜安瓿回收和余液回收时&#xff0c;需要前端发送指令给回收柜&#xff0c;比如开门、关门等。还需要收到回收柜结果&#xff0c;比如回收的药品信息等。我项目中用的是浏览器自带的websoket&#xf…

DevOps篇之通过GitLab CI 流水线实现k8s集群中helm应用发布

一. 设计思路 构建一个 GitLab CI 流水线&#xff0c;并且要集成到 K8s 集群中的 Helm 应用发布流程。首先&#xff0c;需要了解 GitLab CI 的基本结构&#xff0c;比如.gitlab-ci.yml 文件的配置&#xff0c;包括 stages、jobs、变量设置等。然后&#xff0c;结合之前讨论的 H…

详尽 | Deeplabv3+结构理解

https://arxiv.org/pdf/1802.02611.pdf https://link.springer.com/chapter/10.1007/978-3-319-10578-9_23 目录 Deeplabv3 Encoder部分 Decoder部分 补充摘要 SPP 空间金字塔池化层模块 Dilated/Atrous Conv 空洞卷积 Deeplabv3 deeplab-v3是语义分割网络&#xff0c;组…

【51单片机】【protues仿真】基于51单片机音乐盒(8首歌曲)系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、数码管显示当前歌曲序号 2、按键切换歌曲和播放暂停​ 3、内置8首音乐 二、使用步骤 基于51单片机的音乐盒是一种能够存储和播放多首歌曲的电子设备&#xff0c;通过定时器产…

@ZooKeeper 详细介绍部署与使用详细指南

文章目录 **ZooKeeper 详细介绍、部署与使用** 1. 概述 & 核心介绍 1.1 什么是 ZooKeeper? 1.2 核心特性 1.3 核心概念 1.4 典型应用场景 2. 部署 (以 3 节点集群为例) 2.1 环境准备 2.2 安装步骤 (在所有节点执行) 2.3 启动与停止集群 2.4 防火墙配置 (如果开启) 3. 基本…

腾讯Hunyuan-MT-7B翻译模型完全指南:2025年开源AI翻译的新标杆

&#x1f3af; 核心要点 (TL;DR) 突破性成就&#xff1a;腾讯混元MT-7B在WMT25全球翻译竞赛中获得30/31项第一名双模型架构&#xff1a;Hunyuan-MT-7B基础翻译模型 Hunyuan-MT-Chimera-7B集成优化模型广泛语言支持&#xff1a;支持33种语言互译&#xff0c;包括5种中国少数民…

Web 集群高可用全方案:Keepalived+LVS (DR) 负载均衡 + Apache 服务 + NFS 共享存储搭建指南

文章目录Keepalived LVS&#xff08;DR&#xff09; Apache NFS项目背景业务场景与核心需求传统架构的痛点与局限技术方案的选型逻辑项目价值与预期目标项目实践项目环境基础配置配置 router配置免密登录-可选配置 nfs配置 web配置 LVS-RS配置 HA 和 LVS-DS配置 ha1配置 ha2测…

Prometheus监控预警系统深度解析:架构、优劣、成本与竞品

目录 一、Prometheus是什么&#xff1f;核心定位与架构 二、竞品分析&#xff08;Prometheus vs. Zabbix vs. Nagios vs. Commercial SaaS&#xff09; 三、部署成本分析 四、服务器资源消耗分析 五、给您的最终建议 一、Prometheus是什么&#xff1f;核心定位与架构 Prom…

Nginx反向代理及配置

Nginx反向代理 二级域名系统 顾名思义&#xff0c;我们有很多的这个不同的二级域名的用户来访问我们&#xff0c;比如说微博。它有一个主域名weibo.com。如果我叫一鸣,申请了一个微博&#xff0c;然后我就可以在微博这个主系统上申请一个二级域名来访问我微博的主页&#xff0…

嵌入式系统通信总线全景探秘:从板内到云端

引言 在嵌入式系统设计中&#xff0c;选择合适的通信总线是决定系统性能、成本和可靠性的关键因素。从简单的芯片间通信到复杂的工业网络&#xff0c;不同的总线技术各司其职&#xff0c;形成了嵌入式世界的"交通网络"。本文将深入探讨五种经典且重要的通信技术&…

2022版Unity创建时没有2D灯光(2D Light),没有Global LIght2D怎么办?

简单来说就是你的渲染管线没有升级到URP管线&#xff0c;所以才没有这些2D灯光 如果你的创建灯光和我一样&#xff0c;没有红线划掉的部分&#xff0c;说明你和我的问题一样&#xff0c;看下面的教程可以解决。 1. 确保Unity版本 确保你的Unity版本至少为2019.4或更高版本&…

技术小白如何快速的了解opentenbase?--把握四大特色

1.基本介绍 作为一名计算机专业相关背景的学生&#xff0c;我们或多或者接触过一些数据库&#xff0c;对于数据库肯定是有所了解的&#xff1b; 你可能学习的是和微软的sql server这样的数据库&#xff1b; 你可能接触的更多的是企业级项目开发里面使用的这个mysql数据库&#…

企业微信AI落地:如何选择企业微信服务商?

现在企业用企业微信做客户运营&#xff0c;最怕的不是“没AI工具”&#xff0c;而是“AI用不起来”——要么功能不贴业务场景&#xff0c;员工嫌麻烦不用&#xff1b;要么回复不专业&#xff0c;客户体验差&#xff1b;要么数据不同步&#xff0c;管理者看不到效果。其实解决这…

【学Python自动化】 11 标准库简介 —— 第二部分

一、格式化输出 reprlib 模块 提供定制版 repr()&#xff0c;缩略显示大型或深层嵌套对象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模块 美化输出&#xff0c;添加换行和缩进显示复杂数据结构impor…

【Kubernetes】知识点2

15. 什么是Pod的根容器&#xff1f;答&#xff1a;Pod 的根容器是每个 Pod 中默认存在的一个特殊容器pause容器&#xff0c;有时也称为infra容器&#xff0c;它是Pod 启动时创建的第一个容器&#xff0c;也是整个 Pod中所有容器的 “父容器”。其核心作用是为 Pod 内的所有容器…

视频增强AI哪个效果好?实战对比帮你找到最适合的工具

hitpaw 牛小影hitpaw 牛小影在处理低质量视频时&#xff0c;我们经常会遇到画面模糊、噪点过多、分辨率不足等问题&#xff0c;比如老旧视频资料修复、监控录像清晰化、手机拍摄视频画质提升等。这时候&#xff0c;一款好用的视频增强AI软件就成了刚需。下面就为大家盘点几款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 请假申请单public class LeaveBill{/// <summary>/// 申请人/// </summary>public string EmployeeName { get; s…