在linux系统中,查看文件内容时经常需要定位到特定的某几行,比如排查日志时只看报错前后的内容,或者查看配置文件的某几个段落,掌握查看文件指定行的方法能大幅提升操作效率。

使用head和tail组合查看指定行
head命令用于查看文件开头的内容,tail命令用于查看文件末尾的内容,两者组合可以精准定位到中间的指定行。
查看第n行到第m行的内容
思路是先通过head取出前m行,再通过tail取出最后(m-n+1)行,即可得到第n到m行的内容。
比如要查看文件test.txt的第5行到第10行,命令如下:
# 查看test.txt第5到10行内容 head -n 10 test.txt | tail -n 6
这里的head -n 10表示取文件前10行,tail -n 6表示从这10行里取最后6行,也就是第5到第10行(10-5+1=6)。
查看前n行或后n行的内容
如果只需要查看文件开头的前n行,直接用head命令即可:
# 查看test.txt前20行内容 head -n 20 test.txt
如果只需要查看文件末尾的后n行,直接用tail命令:
# 查看test.txt后15行内容 tail -n 15 test.txt
使用sed命令查看指定行
sed是linux下的流编辑器,也可以用来查看文件的指定行,语法更简洁,适合直接定位行范围。
查看指定单行内容
查看第n行的内容,使用sed -n 'np' 文件名的格式:
# 查看test.txt第8行内容 sed -n '8p' test.txt
查看连续多行内容
查看第n行到第m行的连续内容,使用sed -n 'n,mp' 文件名的格式:
# 查看test.txt第3到12行内容 sed -n '3,12p' test.txt
查看不连续的指定行
如果需要查看不连续的多个行,比如第2行、第5行、第7行,用分号分隔行号即可:
# 查看test.txt第2、5、7行内容 sed -n '2p;5p;7p' test.txt
使用awk命令查看指定行
awk是强大的文本处理工具,通过判断行号NR的值可以筛选出指定行。
查看第n行到第m行的内容,命令格式如下:
# 查看test.txt第4到9行内容,NR表示当前行号 awk 'NR>=4 && NR<=9' test.txt
这里的NR>=4 && NR<=9表示行号大于等于4且小于等于9,就会输出对应行的内容。
不同方法的适用场景对比
以下是几种常用方法的特性对比,方便用户根据场景选择:
| 方法 | 适用场景 | 优势 |
|---|---|---|
| head+tail组合 | 查看连续的中间行、前n行、后n行 | 命令简单,容易记忆,适合新手 |
| sed命令 | 查看连续行、不连续行、单行 | 语法简洁,支持多种行定位方式 |
| awk命令 | 复杂行筛选、结合其他文本条件过滤 | 功能强大,可结合其他文本规则一起筛选 |
注意事项
- 如果文件名包含空格,需要用引号包裹文件名,比如
head -n 10 "test file.txt" - 查看大文件时,这几种方法都不会加载整个文件到内存,效率都比较高
- 如果使用sed命令时提示权限不足,需要确认对文件有读取权限,或者加上sudo执行