以下是关于 sed(Stream Editor)的深度详解和日常高频使用场景,结合实用示例说明:


一、sed 核心概念

  • 流式编辑器:逐行处理文本,不直接修改源文件(除非使用 -i 选项)
  • 正则支持:基础正则(BRE)和扩展正则(ERE,需加 -r-E
  • 核心原理:读取 → 模式匹配 → 执行命令 → 输出

二、基础语法格式

sed [选项] '地址范围/命令/参数' 文件

三、高频使用场景与示例

1. 文本替换
# 替换每行第一个匹配项
sed 's/old/new/' file.txt# 全局替换(所有匹配项)
sed 's/old/new/g' file.txt# 替换第N次出现的匹配
sed 's/old/new/2' file.txt          # 只替换每行第二个匹配# 替换时忽略大小写(GNU sed扩展)
sed 's/old/new/i' file.txt
2. 删除行
# 删除空行
sed '/^$/d' file.txt# 删除注释行(以#开头)
sed '/^#/d' config.conf# 删除特定范围行
sed '10,20d' file.txt               # 删除10-20行
sed '/start/,/end/d' file.txt       # 删除两个模式间的行
3. 插入/追加行
# 在第3行前插入文本
sed '3i\插入的内容' file.txt# 在匹配行后追加
sed '/pattern/a\追加的内容' file.txt# 文件开头/结尾插入
sed '1i\开头内容' file.txt
sed '$a\结尾内容' file.txt
4. 行筛选打印
# 打印含"error"的行(类似grep)
sed -n '/error/p' log.txt# 打印行号范围
sed -n '10,15p' file.txt# 打印奇数行
sed -n '1~2p' file.txt              # 1,3,5...
5. 文件原地修改
# 直接修改文件(先测试!)
sed -i.bak 's/old/new/g' file.txt   # 备份原文件为file.txt.bak
sed -i '' 's/old/new/g' file.txt    # macOS下无备份修改
6. 高级替换技巧
# 引用匹配内容
echo "123 abc" | sed 's/[0-9]\+/[&]/'    # 输出 "[123] abc"# 分组捕获(使用\1,\2引用)
echo "foo-bar" | sed 's/\(foo\)-\(bar\)/\2-\1/'  # 输出 "bar-foo"# 条件替换(仅对匹配行操作)
sed '/warning/s/foo/bar/' log.txt     # 只在含"warning"的行替换foo
7. 多命令组合
# 用分号分隔多个命令
sed 's/foo/bar/g; s/baz/qux/g' file.txt# 或用-e选项
sed -e 's/foo/bar/' -e '/baz/d' file.txt

四、日常实用案例

1. 日志处理
# 提取时间戳和错误信息
sed -n '/ERROR/{s/.*\(202[0-9]-[0-9]\{2\}-[0-9]\{2\}\).*\(ERROR:.*\)/\1 \2/p}' app.log# 统计HTTP状态码
sed -n 's/.*HTTP\/1\.[01]" \([0-9]\{3\}\).*/\1/p' access.log | sort | uniq -c
2. 配置文件修改
# 注释掉某配置项
sed -i '/^SELINUX=/s/^/#/' /etc/selinux/config# 修改键值对
sed -i 's/^\(PORT=\).*/\13306/' config.ini
3. 数据清洗
# CSV转TSV
sed 's/,/\t/g' data.csv# 删除HTML标签
sed 's/<[^>]*>//g' page.html
4. 批量重命名
# 测试重命名命令
ls *.jpg | sed 's/\(.*\)\.jpg/mv & \1_backup.jpg/'# 实际执行(先确认输出无误)
ls *.jpg | sed 's/\(.*\)\.jpg/mv & \1_backup.jpg/' | bash
5. 代码处理
# 缩进所有行(前加4空格)
sed 's/^/    /' source.py# 删除行尾空格
sed 's/[[:space:]]*$//' file.txt

五、sed 调试技巧

  1. 先不加 -i:测试时输出到屏幕确认效果
    sed 's/pattern/replace/' file.txt
    
  2. 打印处理的行
    sed -n 's/foo/bar/p' file.txt     # 只显示被修改的行
    
  3. 使用 & 调试
    sed 's/pattern/& ==> replaced/' file.txt  # 标记被替换的内容
    

六、性能优化建议

  1. 合并多个操作:减少管道和多次读取
    # 低效
    cat file | sed 's/foo/bar/' | sed '/baz/d'
    # 高效
    sed -e 's/foo/bar/' -e '/baz/d' file
    
  2. 限制处理范围:用地址范围减少处理行数
    sed '100,200s/foo/bar/' largefile.txt
    

掌握这些 sed 技巧后,90% 的日常文本处理任务都能高效完成。对于更复杂的需求(如跨行处理),可结合 awkperl

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

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

相关文章

ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志

ADB 调试日志全攻略&#xff1a;如何开启与关闭 ADB_TRACE 日志 ADB&#xff08;Android Debug Bridge&#xff09;是 Android 开发的核心工具&#xff0c;但在排查问题时&#xff0c;默认日志可能不够详细。通过设置环境变量 ADB_TRACE&#xff0c;可以开启 全量调试日志&…

实现druid数据源密码加密

生成加密密码集成了druid链接池的&#xff0c;可以实现数据源密码加密。加密方式如下构建单元测试&#xff0c;并输入密码即可生成加密密码以及加密公钥Test public void testPwd() throws Exception {String password "123456";String[] arr com.alibaba.druid.fi…

【TCP/IP】20. 因特网安全

20. 因特网安全20. 因特网安全20.1 安全威胁20.2 安全服务20.3 基本安全技术20.3.1 密码技术20.3.2 报文鉴别技术20.3.3 身份认证技术20.3.4 数字签名技术20.3.5 虚拟专用网&#xff08;VPN&#xff09;技术20.3.6 防火墙技术20.3.7 防病毒技术20.4 IP 层安全20.5 传输层安全20…

数据结构之位图和布隆过滤器

系列文章目录 数据结构之ArrayList_arraylist o(1) o(n)-CSDN博客 数据结构之LinkedList-CSDN博客 数据结构之栈_栈有什么方法-CSDN博客 数据结构之队列-CSDN博客 数据结构之二叉树-CSDN博客 数据结构之优先级队列-CSDN博客 常见的排序方法-CSDN博客 数据结构之Map和Se…

Web攻防-PHP反序列化魔术方法触发条件POP链构造变量属性修改黑白盒角度

知识点&#xff1a; 1.WEB攻防-PHP反序列化-序列化和反序列化 2.WEB攻防-PHP反序列化-常见魔术方法触发规则 3.WEB攻防-PHP反序列化-反序列化漏洞产生原因 4.WEB攻防-PHP反序列化-黑白盒&POP链构造 一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化 什么是反序列化操作…

C# VB.NET多进程-管道通信,命名管道(Named Pipes)

要向已运行的进程发送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是启动新进程&#xff0c;需要使用进程间通信&#xff08;IPC&#xff09;机制。以下是几种常见的实现方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通过…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它彻底改变了C中资源管理和参数传递的方式。下面我将从多个维度深入讲解右值引用。一、核心概念1. 值类别(Value Categories)lvalue (左值): 有标识符、可取地址的表达式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激变换器设计全流程(一)——电路拓扑及工作流程

一、电路拓扑原理 拓扑结构概述 开关反激电源采用反激式拓扑结构&#xff0c;主要由开关管&#xff08;通常为 MOSFET&#xff09;、变压器、输出整流二极管、输出滤波电容以及控制电路等组成。其基本工作原理是通过开关管的周期性开关动作&#xff0c;将输入直流电压转换为高…

uniapp语音播报天气预报微信小程序

1.产品展示2.页面功能(1)点击上方按钮实现语音播报4天天气情况。3.uniapp代码<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…

Pycharm 报错 Environment location directory is not empty 如何解决

好长时间不看不写代码了&#xff0c;人也跟着犯糊涂。今天在Pycharm 导入虚拟环境时&#xff0c;一直报错&#xff1a;“Environment location directory is not empty”&#xff0c;在网上百度很多很多方法都无法解决&#xff0c;直到我翻出我之前自己写的导入虚拟环境的详细过…

React强大且灵活hooks库——ahooks入门实践之场景类(scene)hook详解

什么是 ahooks&#xff1f; ahooks 是一个 React Hooks 库&#xff0c;提供了大量实用的自定义 hooks&#xff0c;帮助开发者更高效地构建 React 应用。其中场景类 hooks 是 ahooks 的一个重要分类&#xff0c;专门针对特定业务场景提供解决方案。 安装 ahooks npm install …

大模型之Langchain篇(二)——RAG

写在前面 跟着楼兰老师学习【LangChain教程】2025吃透LangChain框架快速上手与深度实战&#xff0c;全程干货无废话&#xff0c;三天学完&#xff0c;让你少走百分之99弯路&#xff01;_哔哩哔哩_bilibili 计算相似度 一般用的余弦相似度&#xff0c;这里只是演示计算。 fr…

深入理解图像二值化:从静态图像到视频流实时处理

一、引言&#xff1a;图像分析&#xff0c;从“黑与白”开始在计算机视觉任务中&#xff0c;**图像二值化&#xff08;Image Binarization&#xff09;**是最基础也是最关键的图像预处理技术之一。它通过将灰度图像中每个像素转换为两个离散值&#xff08;通常是0和255&#xf…

云蝠智能 VoiceAgent重构企业呼入场景服务范式

在数字化转型浪潮中&#xff0c;企业呼入场景面临客户服务需求激增与人力成本攀升的双重挑战。传统呼叫中心日均处理仅 300-500 通电话&#xff0c;人力成本占比超 60%&#xff0c;且服务质量受情绪波动影响显著。云蝠智能推出的 VoiceAgent 语音智能体&#xff0c;通过全栈自研…

java进阶(一)+学习笔记

1.JAVA设计模式1.1 什么是设计模式设计模式是软件开发过程中前辈们在长期实践中针对重复出现的问题总结出来的最佳解决方案。这些模式不是具体的代码实现&#xff0c;而是经过验证的、可重用的设计思想&#xff0c;能够帮助开发者更高效地解决特定类型的问题。设计模式的重要性…

Pandas-数据清洗与处理

Pandas-数据清洗与处理一、数据清洗的核心目标二、缺失值处理1. 缺失值检测2. 缺失值处理策略&#xff08;1&#xff09;删除法&#xff08;2&#xff09;填充法三、异常值识别与处理1. 异常值检测方法&#xff08;1&#xff09;统计法&#xff08;2&#xff09;业务规则法2. 异…

在 MacOS 上安装和配置 Kafka

消息代理是一种软件&#xff0c;充当在不同应用程序之间发送消息的中介。它的功能类似于服务器&#xff0c;从一个应用程序&#xff08;称为生产者&#xff09;接收消息&#xff0c;并将其路由到一个或多个其他应用程序&#xff08;称为消费者&#xff09;。消息代理的主要目的…

基于Leaflet调用天地图在线API的多层级地名检索实战

目录 前言 一、天地图在线检索 1、在线检索功能 2、再谈后后接口 二、Leaflet多层级实现实例 1、层级调用实现原理 2、Leaflet中多层级调用 3、成果展示 三、总结 前言 “地图是世界的索引&#xff0c;而地名则是索引中的索引。”当互联网地图进入 Web 2.0 时代&#x…

基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)

基于Prompt结构的语校解析&#xff1a;3H日本语学校信息建模实录&#xff08;4/500&#xff09; 系列延续&#xff1a;500所日本语言学校结构数据工程 关键词&#xff1a;招生结构、JLPTEJU、国籍比例、认定校、Prompt训练集 一、我们在构建什么样的语言学校语料&#xff1f; …

Leaflet面试题及答案(61-80)

查看本专栏目录 文章目录 🟢 面试问题及答案(61-80)61. 如何在地图上显示一个动态更新的图层?62. 如何实现地图上的热力图(Heatmap)?63. 如何自定义地图控件的位置?64. 如何处理地图加载失败的情况?65. 如何实现地图的离线功能?66. 如何将地图导出为图片?67. 如何实…