sed -n '5,10p' 是提取文件第5至10行最轻量高效的方式,逐行读取到第10行即止,避免全文加载,适用于大文件;漏写-n、误用分隔符或末尾空格均会导致错误。

sed -n 'N,Mp' 提取连续行范围最直接
要快速取出文件中第 5 行到第 10 行,sed -n '5,10p' 是最轻量、最常用的方式。它不加载全文,逐行读取到第 10 行就停,对大文件友好。
常见错误现象:
- 漏写
-n:默认会把所有行都输出一遍,再额外打印匹配的 5–10 行,结果重复且混乱 - 用错分隔符:写成
'5-10p'或'5~10p'—— 这些语法无效,sed只认逗号 - 末尾多空格:
'5,10 p'中的空格会让命令失效,报错invalid command code
使用场景:
- 日志切片分析(如取最近 20 行错误)
- 配置文件片段检查(如只看
[mysql]段落起始附近几行) - 配合管道做二级过滤:
sed -n '100,200p' access.log | grep '404'
awk 'NR>=N && NR
当你要提取“从第一个含 ERROR 的行开始,往后 5 行”,awk 的逻辑表达能力就比 sed 强。例如:awk 'NR>=5 && NR 和 <code>sed -n '5,10p' 功能等价,但前者可轻松扩展。
关键差异点:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
NR是 awk 内置行号变量,从 1 开始计数,且对每个输入文件独立重置 - 若处理多个文件(如
awk '...' a.txt b.txt),NR会累加;需用FNR替代来按文件重置 - 性能上,
awk启动开销略高,10 万行以内几乎无感,但超千万行时sed更稳
实用技巧:
- 跳过前 N 行:用
awk 'NR>10' file(比sed -n '11,$p'更易读) - 提取奇数行:
awk 'NR%2==1',sed做不到这么简洁
提取单行别硬套范围语法,用 sed -n 'Np' 或 awk 'NR==N'
查第 2 行数据,sed -n '2p' 是最优解,实测 10 万行文件耗时仅 0.003 秒。有人写成 sed -n '2,2p' 虽然能用,但多一次解析,没必要。
容易踩的坑:
-
sed -n '2p' file遇空文件或不足 2 行时静默无输出 —— 这是预期行为,不是 bug -
awk 'NR==2' file在文件只有 1 行时也静默,但若想输出空值提示,得加END{if(NR - 误用
head -n 2 | tail -n 1:看似直观,但要启动两个进程,还多读一次前 2 行,纯属低效
注意换行符缺失导致的最后一行丢失问题
如果文件最后一行没以 \n 结尾(即 POSIX 意义上的“不完整行”),sed 和 awk 的行为会有微妙差异:
-
sed -n '$p'仍能正确打印最后一行(无论是否有换行符) -
awk 'NR==FNR' file在该情况下可能漏掉最后一行,因为部分 awk 实现将无换行结尾的行视为“未完成记录”而跳过 - 最稳妥的判断方式:
wc -l file返回的行数,和sed -n '$=' file返回的数值是否一致;不一致说明末尾缺换行符
这个细节在处理程序自动生成的日志、临时 dump 文件时特别容易被忽略,一查就发现少一行,却找不到原因。










