sed(Stream Editor)是 Linux 中强大的流编辑器,常用于文本替换、删除、插入等操作。
基本语法
bash复制代码
sed [选项] '命令' 文件
常用选项
选项
说明
-i
直接修改文件(无输出)
-e
执行多个命令
-n
安静模式,只打印处理的行
-r 或 -E
使用扩展正则表达式
核心命令
命令
说明
s/old/new/
替换第一个匹配
s/old/new/g
全局替换
d
删除行
p
打印行
a
在行后追加
i
在行前插入
c
替换整行
y
字符转换
常用示例
1. 文本替换
bash复制代码
# 替换首次匹配
sed 's/old/new/' file.txt
# 全局替换
sed 's/old/new/g' file.txt
# 忽略大小写
sed 's/old/new/gi' file.txt
# 只替换第2个匹配
sed 's/old/new/2' file.txt
# 直接修改文件
sed -i 's/old/new/g' file.txt
2. 指定行操作
bash复制代码
# 替换第3行的内容
sed '3s/old/new/' file.txt
# 替换第2-5行的内容
sed '2,5s/old/new/' file.txt
# 替换以 root 开头的行
sed '/^root/s/bash/csh/' /etc/passwd
3. 删除行
bash复制代码
# 删除第3行
sed '3d' file.txt
# 删除第2-5行
sed '2,5d' file.txt
# 删除空白行
sed '/^$/d' file.txt
# 删除包含"error"的行
sed '/error/d' file.txt
# 删除最后一行
sed '$d' file.txt
4. 打印与查看
bash复制代码
# 只打印第5行(需配合 -n)
sed -n '5p' file.txt
# 打印第3-7行
sed -n '3,7p' file.txt
# 打印匹配行
sed -n '/error/p' file.txt
5. 插入与追加
bash复制代码
# 在第2行后追加
sed '2a\这是新行' file.txt
# 在第3行前插入
sed '3i\插入的内容' file.txt
# 在匹配行后追加
sed '/pattern/a\追加内容' file.txt
6. 多个命令
bash复制代码
# 使用 -e
sed -e 's/old/new/' -e 's/foo/bar/' file.txt
# 使用分号
sed 's/old/new/; s/foo/bar/' file.txt
# 使用花括号(针对特定行)
sed '/pattern/{s/old/new/; s/foo/bar/}' file.txt
7. 使用变量
bash复制代码
# 使用双引号以解析变量
old="hello"
new="world"
sed "s/$old/$new/g" file.txt
8. 常见实用场景
bash复制代码
# 注释掉包含特定内容的行
sed '/pattern/s/^/#/' file.txt
# 删除行首空格
sed 's/^[ \t]*//' file.txt
# 删除行尾空格
sed 's/[ \t]*$//' file.txt
# 提取IP地址
ifconfig | sed -n 's/.*inet \([0-9.]*\) .*/\1/p'