sed(Stream Editor)是 Linux 中强大的流式文本处理工具,主要用于对文本进行过滤、替换、删除、插入等操作。它逐行处理输入,默认输出到终端(不修改原文件),结合正则表达式可以实现复杂的文本处理任务。以下是 se 的常见用法和参数详解:
一、常用参数
参数 | 说明 |
---|---|
-n | 静默模式,仅输出处理过的行(需配合 -p 命令使用) |
-e <脚本> | 指定多个编辑命令(如 sed -e ‘s/foo/bar/’ -e ‘s/baz/qux/’) |
-i [扩容名 ] | 直接修改文件(危险!建议先备份):-i.back 修改前备份原始文件 |
-r 或 -E | 启用扩展正则表达式(简化转义符,如 + () 无需转义) |
-f <脚本文件> | 从文件中读取 sed 命令 |
二、核心命令语法
1. 替换文本 s
sed 's/pattern/replacement/[flags]' file.txt
- 示例:
# 替换每行第一个 "foo" 为 "bar" sed 's/foo/bar/' file.txt # 全局替换所有 "foo"(标志 `g`) sed 's/foo/bar/g' file.txt # 替换第2个匹配到的 "foo" sed 's/foo/bar/2' file.txt # 忽略大小写(标志 `i`,需结合 `-r` 使用) sed -r 's/foo/bar/gi' file.txt # 使用其他分隔符(如处理路径) sed 's#/old/path#/new/path#' file.txt
2. 删除行 d
# 删除包含 "pattern" 的行
sed '/pattern/d' file.txt
# 删除第3行
sed '3d' file.txt
# 删除3到5行
sed '3,5d' file.txt
# 删除空行
sed '/^$/d' file.txt
3. 打印特定行 p
# 配合 `-n` 仅打印匹配的行
sed -n '/pattern/p' file.txt # 类似 grep
sed -n '3,5p' file.txt # 打印3到5行
4. 插入/追加行 i,a
# 在匹配行前插入一行
sed '/pattern/i 插入的内容' file.txt
# 在匹配行后追加一行
sed '/pattern/a 追加的内容' file.txt
5. 替换行 c
# 将匹配的行替换为指定内容
sed '/pattern/c 新的内容' file.txt
6. 字符替换 y
# 类似 tr 命令,逐字符替换(如 a→x,b→y,c→z)
sed 'y/abc/xyz/' file.txt
三、高级用法
1. 多命令组合
# 通过分号分隔多个命令
sed 's/foo/bar/; s/baz/qux/' file.txt
# 或使用 -e 参数
sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt
2. 按行号或模式范围操作
# 替换第5行到第10行的所有 "foo"
sed '5,10s/foo/bar/g' file.txt
# 从匹配 "start" 的行到匹配 "end" 的行删除
sed '/start/,/end/d' file.txt
3. 引用匹配内容 & 和分组 \1
# 将 "foo123" 替换为 "[foo123]"
sed 's/foo[0-9]\+/[&]/g' file.txt
# 使用分组提取内容(需转义括号 `$`)
sed 's/$foo$bar/\1baz/' file.txt # "foobar" → "foobaz"
4. 修改原文件(谨慎!)
# 直接修改文件并备份原始内容为 .bak
sed -i.bak 's/foo/bar/g' file.txt
# 仅修改文件(无备份)
sed -i 's/foo/bar/g' file.txt
四、经典用例
1. 批量替换文件内容
sed -i 's/旧字符串/新字符串/g' *.txt
2. 删除注释行(以 # 开头)
sed -i '/^#/d' config.conf
3. 在特定行后插入内容
# 在 "INSERT_HERE" 行后插入内容
sed -i '/INSERT_HERE/a 新增内容' file.txt
4. 提取日志中的时间戳
cat log.txt | sed -n 's/.*$2023-[0-9]\{2\}-[0-9]\{2\}$.*/\1/p'
五、注意事项
- 备份文件:使用 -i 前务必确认操作,建议先不加 -i 测试命令。
- 平台差异:macOS 的 sed 与 Linux 可能有差异(如 -i 必须指定备份后缀)。
- 正则表达式:默认使用基础正则表达式,复杂场景可加 -r 或 -E 启用扩展语法。
掌握 sed 可大幅提升命令行文本处理效率!建议结合 man sed 手册深入学习。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容