文章最后更新时间:2025年06月11日
sed 文本处理工具完全指南
前言
sed 是 Linux 系统中强大的流编辑器(Stream EDitor),可对文本进行高效的查找、替换、删除、插入等操作,常用于处理文本文件或管道输出数据。
应用场景
- 批量修改配置文件:快速修改大量配置文件中的特定参数,避免手动编辑。
- 日志处理:提取日志信息、删除无用行或格式化内容。
- 文本数据清洗:替换特定字符、删除不需要的字段。
- 脚本自动化:在 Shell 脚本中实现文本处理任务。
核心选项:-i 直接修改文件
sed -i
可直接修改文件内容,无需重定向输出。注意:操作前建议备份文件,避免误改系统配置!
一、文本行添加(增)
1. 行后插入(a 命令)
# 在第4行后添加新行(输出到标准输出)
sed -e '4a/新添加一行' test
sed -e '4a\新添加一行' test # 推荐写法,避免斜杠冲突
# 直接修改文件(谨慎操作)
sed -i '4a\新添加一行' test
2. 行前插入(i 命令)
# 在第4行前插入新行
sed '4i\新添加一行' test
3. 多行添加
# 在第2行后添加两行(单引号包裹,反斜杠换行)
sed '2a Drink tea or ..... \
drink beer?' test
二、文本行删除(删)
1. 删除指定行范围
# 删除第2-5行
nl test | sed '2,5d'
# 删除第3行到最后一行
nl test | sed '3,$d'
2. 删除包含特定字符的行
# 删除所有包含"oo"的行
nl test | sed '/oo/d'
三、文本内容修改(改)
1. 覆盖整行(c 命令)
# 将第2-5行替换为"No number"
nl test | sed '2,5c No number'
2. 字符串替换(s 命令)
# 将"oo"替换为"kk"(仅替换第一个匹配项)
sed 's/oo/kk/' test
# 全局替换(所有匹配项)
sed 's/oo/kk/g' test
3. 多点编辑(-e 选项)
# 同时执行删除和替换操作
sed -e '3,$d' -e 's/HELLO/RUNOOB/g' test
四、文本内容查询(查)
1. 查找包含特定字符的行
# 查找包含"oo"的行并输出(-n 仅显示匹配行)
sed -n '/oo/p' test
五、高级应用:数据查找与替换
1. 批量处理文件
# 将当前目录下所有以test开头的文件中的"oo"替换为"KK"
sed -i 's/oo/KK/g' test*
2. 结合正则表达式提取数据
# 提取本机IP地址(排除回环地址)
ip add | grep 'inet ' | grep -v '127' | sed 's/inet.*//g' | sed 's/\/.*$//g'
六、实用案例
1. 修改文件后缀
# 将所有.txt文件重命名为.md(通过sed生成命令)
ls *.txt | sed 's/.txt/.md/g' | xargs -i mv {} {}
2. 配置文件参数修改
# 将httpd.conf中的80端口改为8080
sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
总结:sed 常用命令速查表
命令 | 作用 | 示例 |
---|---|---|
a | 行后插入 | sed '4a\新行' file |
i | 行前插入 | sed '4i\新行' file |
d | 删除行 | sed '2,5d' file |
c | 覆盖整行 | sed '2c\新内容' file |
s | 字符串替换 | sed 's/old/new/g' file |
-n | 仅输出匹配行 | sed -n '/pattern/p' file |
-i | 直接修改文件 | sed -i 's/old/new/g' file |
-e | 多点编辑 | sed -e 'cmd1' -e 'cmd2' file |
通过 sed 可高效处理文本数据,结合正则表达式能应对复杂场景。建议在实际操作前先用测试文件演练,避免误操作导致数据丢失。
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。