当前位置:首页>Linux>Linux命令每日一清单042:sed--流编辑器命令速查表

Linux命令每日一清单042:sed--流编辑器命令速查表

  • 2026-10-11 08:36:33
Linux命令每日一清单042:sed--流编辑器命令速查表

sed(stream editor)是Linux/Unix系统中非交互式的流编辑器,它能够对文本数据流进行过滤和转换。sed逐行处理输入,根据脚本命令对每一行执行编辑操作(如替换、删除、插入、追加等),非常适合在管道中进行批量文本处理。

与交互式编辑器(如vim)不同,sed是命令行驱动的,可以集成到脚本中自动处理大量文件。sed的核心是使用正则表达式进行模式匹配和替换,常用于配置文件修改、日志清洗、文本格式转换等场景。掌握sed是Linux文本处理的重要技能。

1. 基本语法

命令说明
sed 'script' file
对文件执行sed脚本
sed -n 'script' file
抑制自动打印(仅打印p命令的行)
printf '%s\n' "text" | sed 'script'
从标准输入读取
sed -e 'cmd1' -e 'cmd2' file
执行多个命令
sed -f script.sed file
从文件读取sed命令

2. 常用选项

选项说明
-n
抑制自动打印(仅输出p命令指定的行)
-E
使用扩展正则表达式(GNU和BSD均支持)
-r
使用扩展正则表达式(仅GNU sed)
-i
原地编辑文件(GNU sed)
-i.bak
原地编辑并创建.bak备份
-e
添加脚本命令
-f
从文件读取脚本

3. 替换操作

使用s/old/new/格式替换文本:

命令说明
sed 's/old/new/' file
替换每行第一个匹配
sed 's/old/new/g' file
替换每行所有匹配
sed 's/old/new/2' file
替换每行第二个匹配
sed 's/old/new/Ig' file
忽略大小写替换(GNU sed)
sed 's|/usr|/opt|g' file
使用交替分隔符
sed -n 's/old/new/p' file
仅打印被替换的行
sed 's/old/new/w out.txt' file
将替换的行写入文件

4. 地址范围

将命令应用到特定行或模式:

命令说明
sed '3s/a/b/' file
仅在第3行替换
sed '1,5s/a/b/' file
第1到5行替换
sed '/pattern/s/a/b/' file
匹配pattern的行替换
sed '3,/pattern/s/a/b/' file
第3行到第一个匹配行
sed '/start/,/end/d' file
删除从start到end的行
sed '/start/,+2d' file
删除匹配行及之后2行
sed '1~2d' file
删除奇数行(每隔一行)

5. 打印与删除

命令说明
sed -n 'p' file
打印所有行(同cat)
sed -n '3p' file
仅打印第3行
sed -n '/pattern/p' file
打印匹配pattern的行
sed -n '1,5p' file
打印第1到5行
sed -n '$p' file
打印最后一行
sed 'd' file
删除所有行(不输出)
sed '3d' file
删除第3行
sed '/pattern/d' file
删除匹配pattern的行
sed '/^$/d' file
删除空行
sed '/^#/d' file
删除注释行

6. 插入、追加、替换行

命令说明
sed '2i\new line' file
在第2行前插入
sed '2a\new line' file
在第2行后追加
sed '2c\new line' file
替换第2行
sed '/pattern/i\new line' file
在匹配行前插入
sed '/pattern/a\new line' file
在匹配行后追加
sed '$a\new line' file
在文件末尾追加

注意: 在脚本或单引号中,反斜杠后的换行符是必要的。在命令行中可直接使用:sed '2i\new line' file

7. 其他命令

命令说明
sed 'y/abc/xyz/' file
字符转换(逐字符映射)
sed '=' file
打印行号
sed -n '=' file
仅打印行号
sed 'q' file
处理第一行后退出
sed '3q' file
第3行后退出
sed 'n' file
读取下一行(跳过当前输出)
sed 'N' file
将下一行追加到模式空间
sed '/pattern/r other.txt' file
在匹配行后读取文件内容
sed '/pattern/w out.txt' file
将匹配行写入文件

8. 原地编辑

直接修改文件内容(谨慎使用):

命令说明
sed -i 's/old/new/g' file
原地修改(GNU sed)
sed -i.bak 's/old/new/g' file
原地修改并创建.bak备份
sed -i '' 's/old/new/g' file
macOS/BSD原地修改
sed -i -e 's/a/b/' -e 's/c/d/' file
执行多个原地修改

9. 正则表达式与捕获组

命令说明
sed 's/[0-9]\{4\}/YEAR/' file
替换4位数字(基本正则)
sed -E 's/[0-9]{4}/YEAR/g' file
扩展正则表达式
sed 's/\(foo\)bar/\1baz/' file
捕获组(基本正则)
sed -E 's/(foo)bar/\1baz/' file
捕获组(扩展正则)
sed -E 's#(https?)://#\1://#' file
捕获组+交替分隔符
sed -E 's/\b([0-9]+)\b/*\1*/g' file
数字两侧加星号
sed -E 's/^([^,]*),(.*)/\2,\1/' file
交换CSV两列

10. 实用组合模式

命令说明
sed 's/[[:space:]]\+$//' file
删除行尾空白
sed 's/^[[:space:]]\+//' file
删除行首空白
sed 's/[[:space:]]\+/ /g' file
合并多个空白为单空格
sed '/^#/d; /^$/d' file
删除注释行和空行
sed -n 'n;p' file
打印偶数行
sed -n 'p;n' file
打印奇数行
sed '1!G;h;$!d' file
反转文件行序
sed 's/.*/\L&/' file
转换为小写(GNU sed)
sed 's/.*/\U&/' file
转换为大写(GNU sed)
`sed '/^$/d' file
sed '/^#/d'`

11. 常用选项速查

选项完整名称说明
-n
--quiet, --silent
抑制自动打印
-E
--regexp-extended
扩展正则表达式
-r
--regexp-extended
扩展正则(GNU)
-i
--in-place
原地编辑
-e
--expression
添加脚本命令
-f
--file
从文件读取脚本
-z
--null-data
以NUL分隔行

12. sed vs awk 对比

工具适用场景特点
sed
文本替换、行编辑、流式转换
简洁、高效、正则强大
awk
结构化文本处理、字段操作
支持算术、数组、格式化

13. 故障排查

问题解决方法
sed: -e expression #1, char X: unterminated 's' command
检查分隔符是否配对;特殊字符需转义
替换中的斜杠被误解析
使用交替分隔符,如s|/usr|/opt|
原地编辑在macOS上失败
macOS使用sed -i '' 's/old/new/g' file
扩展正则不生效
使用-E而非-r;检查sed版本
捕获组替换不工作
基本正则需转义括号:\(...\);扩展正则用(...)
命令不输出结果
检查是否使用-n但缺少p命令
多行匹配失败
sed默认单行处理;考虑使用N命令或awk
特殊字符需要转义/
、\、&、\n等需转义处理

温馨提示: sed是文本处理利器,建议掌握以下技巧:1)先用不带-i的命令测试,确认效果后再原地修改;2)使用-i.bak备份原文件是安全做法;3)使用交替分隔符避免转义混乱;4)-n配合p可以实现精确行提取;5)扩展正则表达式(-E)更易读写;6)复杂编辑可写入.sed文件用-f执行。在管道中使用sed时,不需要-i选项,直接输出到stdout。对于涉及字段计算的场景,awk可能是更好的选择。

本文PDF格式下载:

  关注公众号(haopython),请回复: LTSED

最新文章

随机文章