当前位置: 首页 > news >正文

深入掌握sed:Linux文本处理的流式编辑器利器

一、前言:sed是什么?

二、sed的工作原理

数据处理流程:

详细工作流程:

三、sed命令常见用法

基本语法:

常用选项:

常用操作命令:

四、实用示例演示

1. 输出符合条件的文本(p命令)

2. 删除符合条件的文本(d命令)

3. 替换符合条件的文本

4. 迁移符合条件的文本

5. 使用脚本编辑文件

五、生产环境实用案例

案例1:修改网络配置

案例2:调整Apache配置

案例3:VSFTPD配置调整脚本

六、高级技巧:分组操作

总结

一、前言:sed是什么?

sed(Stream Editor,流编辑器)是一个强大的文本处理工具,它能够通过脚本指令对文本文件进行高效的处理和编辑。sed主要用于自动化编辑一个或多个文件、简化重复性文件操作以及编写文本转换程序。

二、sed的工作原理

理解sed的工作原理至关重要,这直接影响操作结果的准确性。

数据处理流程:

  1. 读取:逐行读取文件内容到模式空间(pattern space)

  2. 执行:在模式空间中匹配条件并进行数据处理

  3. 输出:处理完成后将结果输出到屏幕

详细工作流程:

  • 读取:sed从输入流(文件、管道或标准输入)读取一行内容到临时缓冲区(模式空间)

  • 执行:默认情况下,所有sed命令在模式空间中顺序执行

  • 显示:将修改后的内容发送到输出流,然后清空模式空间

重要提示:默认情况下sed不会直接修改原文件,除非使用重定向或-i选项保存输出。

三、sed命令常见用法

基本语法:

bash

sed [选项] 操作 参数
sed [选项] -f scriptfile 参数

常用选项:

选项含义
-e进行多次编辑
-n取消默认输出
-f指定sed脚本文件
-i直接在源文件中修改
-r使用扩展正则表达式

常用操作命令:

命令含义
p打印输出
d删除指定行
i在指定行之前插入内容
a在指定行后面插入内容
c替换指定行所有内容
s搜索替换

四、实用示例演示

1. 输出符合条件的文本(p命令)

bash

sed -n 'p' demo                    # 输出所有内容,等同于cat
sed -n '3p' demo                   # 输出第3行
sed -n '3,5p' demo                 # 输出3-5行
sed -n 'p;n' demo                  # 输出所有奇数行
sed -n 'n;p' demo                  # 输出所有偶数行
ifconfig ens33 | sed -n 2p         # 直接显示第二行内容# 正则表达式匹配
sed -n '/the/p' demo               # 输出包含the的行
sed -n '/the/=' demo               # 输出包含the的行号
sed -n '/[0-9]$/p' demo            # 输出以数字结尾的行

2. 删除符合条件的文本(d命令)

bash

nl demo | sed '3d'                 # 删除第3行
nl demo | sed '3,5d'               # 删除3-5行
nl demo | sed '/cross/d'           # 删除包含cross的行
sed '/^$/d' demo                   # 删除所有空行

3. 替换符合条件的文本

bash

sed 's/the/THE/' demo              # 每行第一个the替换为THE
sed 's/1/L/2' demo                 # 每行第2个1替换为L
sed 's/the/THE/g' demo             # 所有the替换为THE
sed 's/o//g' demo                  # 删除所有o字符
sed 's/^/#/' demo                  # 每行行首插入#号
sed 's/$/EOF/' demo                # 每行行尾插入EOF
sed '3,5s/the/THE/g' demo          # 3-5行中所有the替换为THE# 直接修改配置文件
sed -i.bak 's/SELINUX=disabled/SELINUX=enable/' /etc/selinux/config

4. 迁移符合条件的文本

bash

sed '/the/{H;d};$G' demo           # 包含the的行迁移至文件末尾
sed '1,5{H;d};17G' demo            # 1-5行内容转移至第17行后
sed '/the/w out.file' demo         # 包含the的行另存为文件
sed '/the/r /etc/hostname' demo    # 将文件内容添加到包含the的行后
sed '3aNew' demo                   # 第3行后插入新行
sed '3aNew1\nNew2' demo            # 第3行后插入多行内容

5. 使用脚本编辑文件

创建脚本文件opt.list

text

1,5H
1,5d
16G

执行脚本:

bash

sed -f opt.list demo

五、生产环境实用案例

案例1:修改网络配置

bash

# 将ens33接口IP修改为192.168.10.100
sed -i 's/^IPADDR=.*/IPADDR=192.168.10.100/' /etc/sysconfig/network-scripts/ifcfg-ens33

案例2:调整Apache配置

bash

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

案例3:VSFTPD配置调整脚本

bash

#!/bin/bash
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFIG="/etc/vsftpd/vsftpd.conf"# 备份配置文件
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak# 调整配置
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
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG# 重启服务
systemctl restart vsftpd
systemctl enable vsftpd

六、高级技巧:分组操作

bash

# 分组替换
echo 123abcxyz | sed -r 's/(123)(abc)(xyz)/\1/'# 提取IP地址
ifconfig ens33 | sed -rn '2s/.*inet ([0-9.]+).*/\1/p'# 替换制表符和空格
sed -r 's/[[:space:]]+/#/g' /etc/hosts.bak

总结

sed是Linux系统中不可或缺的文本处理工具,通过掌握其基本用法和高级技巧,可以极大地提高文本处理效率。无论是简单的文本替换还是复杂的批量处理,sed都能提供优雅的解决方案。

使用sed的关键要点

  • 理解模式空间的概念

  • 熟练使用正则表达式

  • 掌握各种编辑命令的组合使用

  • 在生产环境中使用前务必先备份

希望本文能帮助您更好地理解和运用sed这个强大的文本处理工具!

http://www.dtcms.com/a/365495.html

相关文章:

  • 权威认证!华宇TAS应用中间件获得商用密码产品认证证书
  • MongoDB 性能调优:十大实战经验总结 详细介绍
  • (Me)Adobe Media Encoder 2025音视频格式转码软件及视频编码软件,全新版免激活,安装即永久使用!
  • 面经分享二:Kafka、RabbitMQ 、RocketMQ 这三中消息中间件实现原理、区别与适用场景
  • windows server2008R2 远程提示用户名密码错误
  • 往届生还有机会进入计算机这个行业吗?还能找见好工作吗
  • 软件测试基础知识(数据库篇)
  • [光学原理与应用-377]:ZEMAX - 优化 - ZEMAX中的评价函数、类型、优化算法及其关系解析
  • Coze源码分析-资源库-创建提示词-前端源码
  • 聚焦诊断管理(DM)的传输层设计、诊断服务器实现、事件与通信管理、生命周期与报告五大核心模块
  • 集成学习算法简介
  • 水资源论证方法与报告编制技术及实际案例分析
  • ruoyi vue element 实现点击、返回首页收起已经展开的菜单栏
  • CI/CD流水线驱动自动化流程深度解析:选型、竞品、成本与资源消耗
  • Java项目打包成EXE全攻略​
  • 企业内网安全守护全面指南:从基础防护到智能管理的一站式解决方案
  • vue3前端开发的基础教程——快速上手
  • BERT实战|推理与微调
  • 如何从PDF中高效提取表格数据
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • Flutter + Web:深度解析双向通信的混合应用开发实践
  • 深入解析 MySQL 存储引擎架构
  • 智能制造——解读71页装备制造集团SCM集成计划体系顶层设计方案【附全文阅读】
  • 超低延迟RTSP播放器的技术挑战与跨平台实现之道
  • AWK文本处理工具
  • 【Python练习题】Python小白必练100题答案-第81-97题
  • 采暖系统误区汇总!80%家庭中招,这样用才省电又健康
  • 特斯拉“宏图4.0”计划定调AI革命,相关巨头入局人形机器人赛道竞速升级!
  • 做 DevOps 还在被动救火?这篇让你把监控玩成 “运维加速器”!
  • 【FastDDS】Layer DDS之Domain ( 03-DomainParticipantListener)