sed -n 可精准打印指定行区间,支持数字范围、正则匹配及混合地址,配合管道和重定向提升日志处理效率,需注意加 -n、避免空格、慎用大文件全量处理。

用 sed -n '起始行,结束行p' 就能精准打印指定行区间,跳过其余内容,避免满屏干扰。
基础用法:打印连续行范围
最常用的是指定起止行号,配合 -n 关闭默认输出,只显示匹配的行:
-
打印第5到第12行:
sed -n '5,12p' logfile.txt -
从第1行打印到最后一行:
sed -n '1,$p' logfile.txt(等效于直接 cat,但更可控) -
只打印最后一行:
sed -n '$p' logfile.txt
灵活定位:结合正则或混合地址
不只是数字,还能用模式缩小范围,特别适合日志中按时间、关键词截取片段:
-
从含 "ERROR" 的行开始,到下一个含 "END" 的行为止:
sed -n '/ERROR/,/END/p' app.log -
第10行之后,第一个匹配 "timeout" 的行及其后两行:
sed -n '10,/timeout/{/timeout/{p;n;p;n;p;}}' app.log(需配合多命令,更推荐用-e拆分)
实用技巧:配合管道与实时查看
日志常是动态生成的,可组合其他命令提升效率:
-
查看实时日志中最近100行里的错误段:
tail -n 100 app.log | sed -n '/CRITICAL\|FATAL/p' -
带行号打印第20–30行,方便定位:
sed -n '20,30p' access.log | nl -w3 -s': ' -
把结果保存到临时文件,避免重复刷屏:
sed -n '100,150p' debug.log > snippet.txt
注意避坑:常见误操作
几个容易忽略但影响效果的点:
- 漏掉 -n:不加会先输出全部原始内容,再额外打出目标行,反而更乱
- 行号超出范围:如
sed -n '1000,2000p'应用于只有500行的文件,不会报错,只是静默无输出 - 逗号前后不能有空格:
'5, 10p'是错的,必须写成'5,10p' - 大文件慎用全量处理:若只需前几行,优先用
head -n 50,比 sed 更轻量


















