sed
是 Linux/Unix 中强大的流编辑器,其 d
命令用于删除匹配的行,它直接修改输入流(文件或管道数据),是文本处理的核心工具之一,以下是详细用法解析:
d
命令核心作用
- 删除指定行:根据行号、模式匹配或范围选择删除文本。
- 原地编辑:常与
-i
参数联用直接修改文件(慎用!建议先备份)。 - 流式处理:高效处理大文件,无需加载全部内容到内存。
基础语法与示例
删除单行
# 删除包含 "error" 的行 sed '/error/d' filename.txt
删除连续行范围
# 删除第2到第5行 sed '2,5d' filename.txt # 删除从 "START" 行到 "END" 行的内容 sed '/START/,/END/d' filename.txt
组合条件删除
# 删除空行(含空格/Tab) sed '/^[[:space:]]*$/d' filename.txt # 删除注释行(以 # 开头) sed '/^#/d' config.conf
反向选择删除(保留匹配行)
# 删除所有非 "important" 行(保留含 "important" 的行) sed '/important/!d' data.txt
高级技巧
结合正则表达式
# 删除以数字开头的行 sed '/^[0-9]/d' file # 删除含日期格式(如 2025-01-01)的行 sed '/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/d' log.txt
与其他命令组合
# 删除第10行后输出到新文件 sed '10d' input.txt > output.txt # 删除空行并直接修改原文件(-i 参数) sed -i '/^$/d' filename.txt # 务必先备份!
多重删除规则
# 同时删除空行和注释行 sed -e '/^$/d' -e '/^#/d' config.conf
注意事项
- 备份原文件:使用
-i
前先备份,避免误操作:cp file.txt file.bak && sed -i '1d' file.txt
- 行号变化:删除操作会动态改变后续行号,需谨慎设计范围。
- 模式匹配:默认使用基础正则表达式(BRE),复杂模式建议用
-E
启用扩展正则。 - 效率优化:处理大文件时,避免使用 (结尾行)等可能降低性能的匹配。
经典应用场景
- 清理日志:删除含特定错误码的行。
- 预处理数据:移除 CSV 文件中的空行或注释。
- 配置精简:删除配置文件中的默认注释。
- 脚本自动化:在 Shell 管道中快速过滤文本。
sed d
是文本处理的瑞士军刀,通过行号、模式或范围精准删除内容,关键点:
- 安全第一:用
>
重定向或备份后再-i
。 - 正则赋能:结合
^
等实现复杂匹配。 - 场景适配:从简单行删除到多条件过滤,灵活应对需求。
引用说明参考 GNU sed 官方手册及 POSIX 标准,经实践验证,更多高级用法可查阅:
- GNU sed 手册
- POSIX sed 规范
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6183.html