sed提取指定行范围用-n 'start,end p'语法,支持行号、正则匹配及混合地址;可配合!排除、$d删末行,流式处理大文件高效。

用 sed 提取文件中指定行范围,核心是利用地址范围语法:sed -n 'start,end p'。其中 -n 抑制默认输出,p 显式打印匹配的行。
提取连续行(如第5到第10行)
直接写出行号范围即可:
-
sed -n '5,10p' file.txt→ 输出第5至第10行(含头尾) - 行号支持变量,例如:
start=3; end=7; sed -n "${start},${end}p" file.txt - 若只取一行,可简写为:
sed -n '8p' file.txt(等价于'8,8p')
结合模式匹配提取行范围
起始和结束地址可以是正则表达式,适合按内容定位:
-
sed -n '/^START$/,/^END$/p' file.txt→ 从首行匹配^START$开始,到下一次匹配^END$结束(含这两行) - 注意:若中间还有
END,会提前终止;如需首次START到最后一次END,需用其他工具(如awk)配合 - 混合使用也行:
sed -n '5,/EXIT/p' file.txt→ 第5行开始,到第一个匹配EXIT的行为止
排除首尾、只取中间部分
有时需要跳过开头几行或去掉末尾几行,可用“!” 取反操作:
-
sed -n '3,$p' file.txt→ 从第3行到结尾(即去掉前2行) -
sed -n '1,5!p' file.txt→ 打印除第1–5行外的所有行(即去掉开头5行) -
sed '$d' file.txt→ 删除最后一行(不加-n,直接输出其余行)
处理大文件时的效率提示
sed 是流式处理,对超大文件提取中间小范围很高效,但注意:
- 行号从1开始计数,不是0
- 如果指定的结束行超出文件总行数,
sed会输出到文件末尾,不会报错 - 想精确截断并避免多余换行,可管道接
head或tail配合,例如:sed -n '10,$p' file.txt | head -n 5(取第10行起的前5行)











