文章目录
sed
命令详解:Linux 文本处理利器
sed
(Stream Editor)是一个强大的流式文本处理工具,支持对文本进行查找、替换、删除、插入等操作。它逐行处理文本,默认输出到标准输出(不修改原文件),结合正则表达式可实现复杂操作。
基本语法
sed [选项] '命令' 输入文件
常用选项:
-n
:抑制默认输出(常与p
命令配合使用)。-i
:直接修改原文件(谨慎使用,建议先测试)。-e
:执行多个命令,如sed -e 'cmd1' -e 'cmd2'
。-r
:启用扩展正则表达式(如+
,|
等无需转义)。
核心功能与示例
1. 删除行(d
命令)
- 删除第 N 行:
sed '3d' file.txt # 删除第 3 行(输出结果,原文件不变)
- 删除匹配模式的行:
sed '/error/d' file.txt # 删除包含 "error" 的行
- 删除范围行:
sed '2,5d' file.txt # 删除第 2 到第 5 行 sed '/start/,/end/d' file # 删除从 "start" 到 "end" 之间的行
2. 查找与替换(s
命令)
- 基本替换:
sed 's/foo/bar/' file.txt # 每行第一个 "foo" 替换为 "bar" sed 's/foo/bar/g' file.txt # 全局替换所有 "foo" sed 's/foo/bar/2' file.txt # 替换每行第 2 个 "foo"
- 使用其他分隔符(避免与内容冲突):
sed 's|/usr/bin|/usr/local/bin|g' file.txt
- 按行范围替换:
sed '3,5s/foo/bar/g' file.txt # 仅替换 3-5 行的 "foo"
- 匹配后替换:
sed '/error/s/foo/bar/g' file.txt # 在包含 "error" 的行中替换 "foo"
3. 打印文本(p
命令)
- 打印指定行(需配合
-n
选项):sed -n '3p' file.txt # 仅打印第 3 行 sed -n '/error/p' file.txt # 打印包含 "error" 的行
- 打印替换后的行:
sed -n 's/foo/bar/p' file.txt # 只输出被替换的行
4. 插入与追加文本
- 在行前插入(
i
命令):sed '2i\插入的内容' file.txt # 在第 2 行前插入一行
- 在行后追加(
a
命令):sed '/pattern/a\追加的内容' file.txt # 在匹配行后追加
5. 修改行(c
命令)
- 替换整行内容:
sed '/pattern/c\新的内容' file.txt # 将匹配行替换为 "新的内容"
综合示例
# 删除空行并替换 "hello" 为 "hi",同时备份原文件
sed -i.bak '/^$/d; s/hello/hi/g' file.txt
# 打印 10-20 行中包含 "error" 的行(-n 抑制默认输出)
sed -n '10,20{/error/p}' file.txt
# 使用扩展正则表达式(-r)匹配多个模式
sed -r 's/(foo|bar)/baz/g' file.txt
注意事项
- 备份原文件:使用
-i.bak
生成备份文件(如file.txt.bak
)。 - 测试命令:先不加
-i
测试命令,确认无误后再修改原文件。 - 正则表达式:特殊字符如
.*[]^$
需转义(或用-r
启用扩展正则)。
掌握 sed
可大幅提升文本处理效率,建议结合 man sed
查阅完整文档!