sed - 流编辑器
基本语法
sed [选项] '命令' [输入文件]
sed [选项] -f 脚本文件 [输入文件]
常用选项
-n # 只输出处理过的行
-e # 指定多个编辑命令
-f # 从文件读取sed脚本
-i # 直接修改源文件(危险但实用)
-i.bak # 修改前备份原文件
-r # 使用扩展正则表达式
sed命令详解
1. 替换命令 (s)
# 基本替换
sed 's/old/new/' file.txt # 每行第一次出现sed 's/old/new/g' file.txt # 全局替换
sed 's/old/new/2' file.txt # 每行第二次出现
sed 's/old/new/ig' file.txt # 忽略大小写全局替换
# 使用不同分隔符
sed 's|/usr/local|/opt|g' file.txt # 使用|代替/sed 's#/home/#/data/#g' file.txt # 使用#代替/
# 引用匹配内容
sed 's/\([0-9]\)\.\([0-9]\)/\2.\1/' file.txt # 交换数字sed -r 's/([0-9])\.([0-9])/\2.\1/' file.txt # 扩展正则简化
2. 删除命令 (d)
sed '5d' file.txt # 删除第5行
sed '1,10d' file.txt # 删除1-10行
sed '/^#/d' file.txt # 删除注释行
sed '/^$/d' file.txt # 删除空行
sed '/^#/d; /^$/d' file.txt # 删除注释和空行
3. 打印命令 (p)
sed -n '1,5p' file.txt # 只打印1-5行
sed -n '/error/p' file.txt # 只打印包含error的行
sed -n '10,20p; 30,40p' file.txt # 打印多个范围
4. 插入/追加/更改 (i/a/c)
# 插入(在指定行前)
sed '2i\插入的内容' file.txtsed '/pattern/i\插入的内容' file.txt
# 追加(在指定行后)
sed '2a\追加的内容' file.txtsed '$a\文件末尾追加' file.txt
# 更改(整行替换)
sed '5c\新的第5行内容' file.txt
5. 转换命令 (y)
sed 'y/abc/ABC/' file.txt # 字符转换 a→A, b→B, c→C
高级用法
# 多个命令组合
sed -e 's/foo/bar/g' -e '/^#/d' file.txtsed 's/foo/bar/g; /^#/d' file.txt
# 保存到变量
new_text=$(sed 's/old/new/g' file.txt)# 处理范围
sed '/start/,/end/d' file.txt # 删除start到end之间的行sed '/start/,/end/s/foo/bar/g' file.txt # 在范围内替换
# 保持空间操作(复杂编辑)
sed '1!G;h;$!d' file.txt # 反转文件行序
实用示例
# 配置文件处理
sed -i '/^#.*PasswordAuthentication/s/^#//' sshd_config # 取消注释sed -i 's/^#\?Port.*/Port 2222/' sshd_config # 修改端口
# 日志处理
sed -n '/2023-10-01 14:/,/2023-10-01 15:/p' access.log # 提取时间范围# 文本清理
sed 's/\s\+$//' file.txt # 删除行尾空格sed 's/\t/ /g' file.txt # 制表符转空格
# CSV处理
sed 's/,/\t/g' data.csv > data.tsv # CSV转TSV