news 2026/5/1 9:58:59

Sed 例程大全

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sed 例程大全

Sed 例程大全

📚 Sed 基础语法

sed [选项] '命令' 文件 sed [选项] -f 脚本文件 文件

🔧 常用选项

选项说明
-n静默模式,只显示处理的行
-e允许多个命令
-f从文件读取 sed 脚本
-i直接修改文件(危险!)
-i.bak修改前备份原文件
-r使用扩展正则表达式
-E-r(macOS 用)

📝 基础替换操作

1.简单替换

# 替换每行第一个匹配的 old 为 new sed 's/old/new/' file.txt # 替换所有匹配的 old 为 new sed 's/old/new/g' file.txt # 替换第 N 次出现的匹配 sed 's/old/new/2' file.txt # 替换第二次出现 sed 's/old/new/2g' file.txt # 从第二次开始替换所有

2.行范围替换

# 只在第5行替换 sed '5s/old/new/' file.txt # 第5-10行替换 sed '5,10s/old/new/' file.txt # 第10行到最后一行替换 sed '10,$s/old/new/' file.txt # 匹配行到文件末尾 sed '/start_pattern/,$s/old/new/' file.txt

3.正则表达式替换

# 使用扩展正则 sed -r 's/(pattern1|pattern2)/new/' file.txt # 数字替换 sed 's/[0-9]\+/NUM/g' file.txt # 所有数字替换为 NUM sed 's/[0-9]\{3,\}/BIG_NUM/g' file.txt # 3位以上数字 # 保留部分内容(分组引用) sed 's/\([0-9]\{3\}\)\([0-9]\{4\}\)/\1-\2/' file.txt # 或使用扩展正则 sed -r 's/([0-9]{3})([0-9]{4})/\1-\2/' file.txt

🎯 行操作

1.显示特定行

# 显示第5行 sed -n '5p' file.txt # 显示第5-10行 sed -n '5,10p' file.txt # 显示匹配行 sed -n '/pattern/p' file.txt # 显示匹配行及后2行 sed -n '/pattern/,+2p' file.txt # 显示从匹配行到另一匹配行 sed -n '/start/,/end/p' file.txt

2.删除行

# 删除第5行 sed '5d' file.txt # 删除第5-10行 sed '5,10d' file.txt # 删除空行 sed '/^$/d' file.txt sed '/^\s*$/d' file.txt # 包括空格空行 # 删除包含pattern的行 sed '/pattern/d' file.txt # 删除注释行 sed '/^#/d' file.txt sed '/^[[:space:]]*#/d' file.txt # 包括前导空格的注释

3.插入/添加行

# 在第5行前插入 sed '5i\插入的内容' file.txt # 在第5行后添加 sed '5a\添加的内容' file.txt # 在匹配行前插入 sed '/pattern/i\插入的内容' file.txt # 在匹配行后添加 sed '/pattern/a\添加的内容' file.txt # 在文件开头插入 sed '1i\文件头' file.txt # 在文件末尾添加 sed '$a\文件尾' file.txt

4.修改整行

# 替换第5行 sed '5c\新的第5行内容' file.txt # 替换匹配的行 sed '/pattern/c\新内容' file.txt

🔄 多重命令

1.使用-e选项

# 多个替换操作 sed -e 's/old1/new1/' -e 's/old2/new2/' file.txt # 组合不同操作 sed -e '1,5d' -e 's/pattern/new/g' file.txt

2.使用分号分隔

# 同一命令中的多个操作 sed 's/old/new/g; 1,5d; $a\结束' file.txt

3.使用大括号分组

# 对特定行执行多个操作 sed '5,10 { s/old/new/g /pattern/d s/foo/bar/ }' file.txt # 对匹配行执行操作 sed '/pattern/ { s/a/A/g s/b/B/g i\=== 匹配行 === }' file.txt

🧩 高级技巧

1.模式空间保持空间

# 交换相邻两行 sed -n '1~2 {h; n; G; p}' file.txt # 反向显示文件 sed '1!G; h; $!d' file.txt # 去重复行(连续) sed '$!N; /^\(.*\)\n\1$/!P; D' file.txt

2.标签和分支

# 跳过某些操作 sed ':start s/old/new/; t start' file.txt # 条件分支 sed '/pattern/b end; s/old/new/; :end' file.txt

3.文件读写

# 将匹配行写入新文件 sed -n '/pattern/w output.txt' file.txt # 从文件读取内容插入 sed '/pattern/r insert.txt' file.txt

📊 实用例程

1.文本格式化

# CSV 转 TSV sed 's/,/\t/g' data.csv # 删除行尾空格 sed 's/[[:space:]]*$//' file.txt # 删除行首空格 sed 's/^[[:space:]]*//' file.txt # 合并多行成一行(用空格) sed ':a; N; $!ba; s/\n/ /g' file.txt # 每行前添加行号 sed = file.txt | sed 'N; s/\n/\t/'

2.配置文件处理

# 注释掉包含 pattern 的行 sed -i '/pattern/s/^/# /' config.conf # 取消注释 sed -i '/pattern/s/^# *//' config.conf # 修改配置项 sed -i '/^key/s/=.*/=new_value/' config.conf # 如果不存在则添加 sed -i '/^key=/!$a\key=value' config.conf

3.日志处理

# 提取时间戳 sed -n 's/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).*/\1/p' log.txt # 过滤特定时间范围 sed -n '/2024-01-01 10:/,/2024-01-01 11:/p' log.txt # 删除调试信息 sed '/DEBUG/d' log.txt

4.代码处理

# 删除空行和注释 sed -e '/^[[:space:]]*#/d' -e '/^[[:space:]]*$/d' script.py # 缩进调整(4空格转2空格) sed 's/ / /g' code.py # 函数名提取 sed -n 's/^def \([a-zA-Z_][a-zA-Z0-9_]*\).*/\1/p' code.py

5.数据处理

# 提取第3列 awk '{print $3}' file.txt # 用 awk 更简单 sed 's/^[^ ]* *[^ ]* *\([^ ]*\).*/\1/' file.txt # 交换第1列和第2列 sed 's/\([^ ]*\) \([^ ]*\)/\2 \1/' file.txt # 添加千位分隔符 sed -r ':a; s/([0-9])([0-9]{3})/\1,\2/; ta' numbers.txt

🎪 复杂例程

1.HTML/XML处理

# 提取标签内容 sed -n 's/.*<title>\(.*\)<\/title>.*/\1/p' page.html # 删除所有HTML标签 sed 's/<[^>]*>//g' page.html # 格式化属性(每行一个) sed 's/\([a-z]*\)="\([^"]*\)"/\1="\2"\n/g' data.xml | sed '/^$/d'

2.Markdown处理

# 提取所有标题 sed -n 's/^#\{1,6\} \(.*\)$/\1/p' README.md # 将一级标题转为大写 sed '/^# /s/.*/\U&/' README.md # 添加目录锚点 sed '/^#/ { h s/^#* // s/[^a-zA-Z0-9]/-/g s/^-*\|-*$//g s/.*/[&](#&)/ x G s/\n/ / }' README.md

3.URL处理

# 提取域名 sed 's|^https\?://\([^/]*\).*|\1|' urls.txt # 删除URL参数 sed 's/\([^?]*\)\?.*/\1/' urls.txt # URL编码(简单版) sed 's/ /%20/g; s/"/%22/g; s/#/%23/g' urls.txt

🛠️ 实用脚本

1.批量重命名

# 将 .txt 改为 .md ls *.txt | sed 's/\(.*\)\.txt/mv "&" "\1.md"/' | sh # 添加前缀 ls | sed 's/.*/mv "&" "prefix_&"/' | sh # 日期格式转换:YYYYMMDD → YYYY-MM-DD echo "20240101" | sed 's/\(....\)\(..\)\(..\)/\1-\2-\3/'

2.模板替换

# 简单的模板引擎 cat template.txt | sed " s/{{NAME}}/John Doe/g s/{{DATE}}/$(date +%F)/g s/{{TIME}}/$(date +%T)/g "

3.安全检查

# 检查危险模式 sed -n '/eval\|exec\|system\|`.*`/p' script.py # 查找长行 sed -n '/^.\{80,\}/p' code.py

⚠️ 注意事项

1.备份原文件

# 危险!直接修改 sed -i 's/old/new/' file.txt # 安全!先备份 sed -i.bak 's/old/new/' file.txt # 更安全!测试后再修改 sed 's/old/new/' file.txt > newfile.txt

2.特殊字符转义

# 路径中的斜杠 sed 's|/old/path|/new/path|' file.txt # 包含特殊字符 sed 's/\[/[/g' file.txt # 转义 [ sed 's/\//\\\//g' file.txt # 转义斜杠

3.性能优化

# 避免多次读取大文件 sed -e 's/old1/new1/' -e 's/old2/new2/' -e 's/old3/new3/' large.txt # 减少正则复杂度 sed 's/\./\./g' file.txt # 简单字面量比 . 快

📋 速查表

命令说明
s/old/new/替换第一个 old
s/old/new/g替换所有 old
/pattern/p打印匹配行
/pattern/d删除匹配行
5i\text第5行前插入
5a\text第5行后添加
5c\text替换第5行
5,10行范围
1~2从1开始每2行
$最后一行
&匹配的文本
\1第一个分组
:label定义标签
b label跳转到标签
t label替换成功则跳转
r file读取文件
w file写入文件
h/H复制/追加到保持空间
g/G复制/追加到模式空间
x交换两个空间

🎓 学习建议

  1. 先测试后执行:使用sed 's/pattern/replace/' file查看输出,确认无误后再加-i
  2. 小步前进:复杂的 sed 脚本分步构建和测试
  3. 注释说明:复杂的 sed 命令添加注释
    sed ' # 第一步:删除空行 /^$/d # 第二步:替换文本 s/old/new/g # 第三步:添加页脚 $a\--- END --- ' file.txt
  4. 考虑替代方案:简单的文本处理用grepcutawk可能更直观

这个大全涵盖了 sed 的绝大多数用法,从基础到高级都有示例。掌握这些例程,你就能处理95%以上的文本处理需求!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:43:59

MATLAB/Simulink仿真下的蓄电池储能及双向斩波充放电控制策略

MATLAB/Simulink仿真可运行&#xff0c;蓄电池储能&#xff0c;储能控制策略&#xff0c;双向斩波、恒流充电、限压充电、恒压控制、组合控制&#xff0c;电流电压双闭环控制&#xff0c;充放电控制策略 有参考资料 最近在搞蓄电池储能的Simulink仿真&#xff0c;发现控制策略…

作者头像 李华
网站建设 2026/4/27 17:43:58

wangEditor处理微信公众号音视频嵌入转存

以下是针对党政事业单位项目需求的完整技术解决方案&#xff0c;包含信创环境适配、跨框架兼容、云存储集成等核心内容&#xff0c;采用买断式授权模式&#xff0c;源代码完全可控&#xff1a; 一、系统架构设计 1. 技术栈选型 前端框架&#xff1a;Vue2/Vue3/React 通用适配…

作者头像 李华
网站建设 2026/4/21 2:10:02

Vue3如何整合第三方插件支持大文件批量上传?

大文件上传解决方案 各位同行大佬们好&#xff0c;作为一个在广东摸爬滚打多年的前端"老油条"&#xff0c;最近接了个让我差点秃顶的项目——20G大文件上传系统&#xff0c;还要兼容IE9&#xff01;这感觉就像让我用竹篮子去打水还要不漏一样刺激… 需求分析&#…

作者头像 李华
网站建设 2026/5/1 7:42:24

jQuery如何实现网页大文件上传的进度回传功能?

.NET程序员的20G文件上传历险记 大家好&#xff0c;我是甘肃的一名苦逼.NET程序员&#xff0c;最近接了个外包项目&#xff0c;客户的需求简直是要我老命啊&#xff01;来给大家扒一扒这个"价值连城"的项目需求&#xff1a; 项目需求&#xff1a;地狱级难度 大文件…

作者头像 李华
网站建设 2026/5/1 8:41:35

JSP如何支持跨平台的大文件分片上传?

大文件传输系统建设方案 一、需求分析与技术选型 作为福建IT行业软件公司项目负责人&#xff0c;针对公司当前大文件传输需求&#xff0c;经过详细技术调研和业务分析&#xff0c;我提出以下技术方案&#xff1a; 1.1 核心需求痛点 现有开源组件无法满足&#xff1a; 文件夹…

作者头像 李华