方法1:使用 tail 命令(推荐简单场景)
原理:从文件末尾反向计算行数
命令:
tail -n +K filename
-
-n +K
:K
代表从第K行开始输出(例如+4
表示跳过前3行) -
示例:
# 原始文件内容(共6行) Line1 Line2 Line3 Line4 Line5 Line6 # 跳过前3行(保留4-6行) tail -n +4 file.txt
输出:
Line4 Line5 Line6
优势:执行速度最快,内存占用低,适合大文件(GB级)。
方法2:使用 sed 命令(灵活处理复杂需求)
原理:流编辑器按行过滤
命令:
sed '1, N d' filename
1, N d
:删除第1行到第N行(例如1,3d
删除前3行)- 示例:
# 删除前2行 sed '1,2d' file.txt
输出:
Line3 Line4 Line5 Line6
高级用法:
- 仅删除第1行:
sed '1d' file.txt
- 删除前3行并保存到新文件:
sed '1,3d' file.txt > newfile.txt
方法3:使用 awk 命令(适合结构化数据)
原理:按行号条件输出
命令:
awk 'NR > K' filename
NR > K
:NR
为当前行号,K
为跳过的行数(例如NR>3
跳过前3行)- 示例:
# 跳过前3行 awk 'NR>3' file.txt
输出:
Line4 Line5 Line6
优势:可结合列处理(如
awk 'NR>3 {print $1}'
提取第一列)。
⚠️ 注意事项
- 大文件优化:
- 优先用
tail
或awk
,避免sed
处理超大文件时可能的内存问题。
- 优先用
- 空行处理:
- 所有方法均保留空行(空行也计入行号),需额外过滤可用
sed '/^$/d'
。
- 所有方法均保留空行(空行也计入行号),需额外过滤可用
- 直接修改源文件:
- 追加
-i
参数(仅sed
/awk
支持):sed -i '1,3d' file.txt # 永久删除前3行
- 追加
场景选择指南
需求 | 推荐命令 | 示例 |
---|---|---|
快速跳过大量行 | tail |
tail -n +1000 log.txt |
删除中间行或复杂规则 | sed |
sed '1,50d; 100d' data |
需同时处理列数据 | awk |
awk 'NR>10 {print $3}' |
引用说明基于Linux核心工具手册(GNU Coreutils 9.4, Sed 4.9, Awk 5.2)及IBM开发者文档的技术验证,确保命令兼容主流Linux发行版(Ubuntu/CentOS等),数据安全建议:操作前使用
cp file.txt file.bak
备份。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4730.html