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

Linux 流编辑器 sed 详解

sed(Stream Editor)是 Linux 系统中一款功能强大的流编辑器,它以行处理为基础,能够对文本进行高效的替换、删除、插入等操作。本文将详细介绍 sed 的核心功能和实用技巧,帮助你掌握这一文本处理利器。

一、sed 基础:工作原理与语法

sed 的工作模式是按行处理输入文本:

  1. 从输入中读取一行文本到缓冲区(模式空间)
  2. 根据指定的编辑命令处理缓冲区中的内容
  3. 将处理后的内容输出到标准输出
  4. 重复上述过程直到所有行处理完毕

基本语法格式:

sed [选项] '命令' 输入文件

二、核心编辑命令

2.1 替换命令(s)

替换是 sed 最常用的功能,基本格式为 s/原字符串/替换字符串/标志

# 基本替换:只替换每行第一个"error"
sed 's/error/warning/' log.txt
# 全局替换:替换每行所有"error"
sed 's/error/warning/g' log.txt
# 替换第3个匹配项:只替换每行第3个"error"
sed 's/error/warning/3' log.txt
# 忽略大小写替换:匹配Error、ERROR等所有形式
sed 's/error/warning/gi' log.txt
# 使用不同分隔符:处理路径等包含/的内容
sed 's|/usr/local|/opt|g' config.txt

2.2 删除命令(d)

删除命令用于移除符合条件的行:

# 删除第5行
sed '5d' data.txt
# 删除第2到第6行
sed '2,6d' data.txt
# 删除最后一行
sed '$d' notes.txt
# 删除包含"temp"的行
sed '/temp/d' files.txt
# 删除空行
sed '/^$/d' report.txt
# 删除从包含"header"的行到文件末尾
sed '/header/,$d' document.txt

2.3 插入与替换命令(i、a、c)

# 在第4行前插入文本
sed '4i\=== 重要数据开始 ===' stats.txt
# 在匹配行后追加文本
sed '/summary/a\-------------------------' report.txt
# 替换匹配行的内容
sed '/version/c\version=2.0.1' app.conf

2.4 打印命令(p)

打印命令常与 -n 选项配合使用,只输出匹配的内容:

# 打印第8行
sed -n '8p' log.txt
# 打印第3到第7行
sed -n '3,7p' data.txt
# 打印包含"critical"的行
sed -n '/critical/p' system.log

三、地址范围:精确控制处理范围

sed 允许通过地址范围精确指定需要处理的行:

# 只在第6行执行替换
sed '6s/old/new/' config.txt
# 在第3到第9行执行全局替换
sed '3,9s/debug=false/debug=true/g' settings.ini
# 从第4行到文件末尾执行替换
sed '4,$s/localhost/192.168.1.1/' hosts.txt
# 在两个模式匹配行之间执行操作
sed '/start/,/end/s/active/inactive/g' status.txt

四、实用场景示例

4.1 文本清洗

# 移除XML标签
sed 's/<[^>]*>//g' data.xml
# 合并多行文本(每3行合并为1行)
sed 'N;N;s/\n/|/g' records.txt

4.2 配置文件处理

# 注释掉所有以"#"开头的行(取消注释)
sed 's/^#//' config.ini
# 修改配置值(将timeout设置为30)
sed '/^timeout=/s/=.*/=30/' app.conf
# 批量更新服务器地址
sed 's/192.168.0./10.0.1./g' server_list.txt

4.3 日志处理

# 提取特定时间段的日志
sed -n '/2023-10-01 08:00:00/,/2023-10-01 09:00:00/p' access.log
# 隐藏日志中的IP地址
sed 's/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/xxx.xxx.xxx.xxx/g' security.log

五、重要选项

  • -i:直接修改文件(建议先备份)

    sed -i.bak 's/old/new/g' file.txt  # 修改文件并创建.bak备份
    

  • -e:执行多个命令

    sed -e 's/foo/bar/' -e '/baz/d' file.txt
    
  • -n:抑制默认输出,只显示处理结果

总结

sed 凭借其强大的文本处理能力,在系统管理、日志分析、配置文件处理等场景中发挥着重要作用。掌握 sed 的核心命令和正则表达式的使用,能够极大提高文本处理效率。通过组合不同的命令和地址范围,你可以实现复杂的文本编辑任务,让 sed 成为你日常工作中的得力助手。

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

相关文章:

  • 实体瘤疗效评估标准
  • 图像打标工具/方法的分类和特点说明
  • Launcher3启动
  • Ansys Mechanical中的声学分析
  • 人工智能与农业:农业的革新
  • Nginx学习笔记(二)——环境准备(VMware CentOS版)
  • Mybatis @Param参数传递说明
  • Postgresql源码(148)hash表的调试方法与技巧
  • Apache IoTDB 全场景部署:基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DB+AI
  • ZeroNews:如何构建安全(无需 V*N!)的工业物联网连接
  • 企业高性能 Web 服务部署实践(基于 RHEL 9)
  • DNS(域名系统)
  • IP分片(IP Fragmentation)
  • NS3中的路由模型-5 OLSR路由协议
  • 疏老师-python训练营-Day42Grad-CAM与Hook函数
  • MySQL 基础操作教程
  • 学习嵌入式第二十五天
  • 机器学习——K-means聚类
  • 个人效能是一个系统
  • 【YOLO11改进 - C3k2融合】C3k2融合EBlock(Encoder Block):低光增强编码器块,利用傅里叶信息增强图像的低光条件
  • 学习嵌入式的第十六天——C语言——位运算
  • tlias智能学习辅助系统--原理篇-SpringBoot原理-自动配置-自定义starter
  • 【走进Docker的世界】深入理解Docker网络:从模式选择到实战配置
  • #Datawhale AI夏令营#第三期全球AI攻防挑战赛(AIGC技术-图像方向)
  • [Shell编程] Shell的正则表达式
  • P3232 [HNOI2013] 游走,solution
  • Python 程序设计讲义(68):Python 的文件操作——使用os模块操作文件
  • 整数规划-分支定界
  • Win10清理C盘步骤
  • 展锐平台(Android15)WLAN热点名称修改不生效问题分析