在 Linux 中删除文件的某几行有多种方法,以下是几种常见且高效的方式:
sed
命令(推荐)删除单行或多行:
# 删除第 N 行(例如第 5 行)
sed -i '5d' filename.txt
# 删除第 M 到 N 行(例如第 2 到 4 行)
sed -i '2,4d' filename.txt
# 删除匹配特定模式的行(例如包含 "error" 的行)
sed -i '/error/d' filename.txt
参数说明:
- -i
:直接修改文件(不加则只预览不修改)。
- d
:表示删除操作。
awk
命令保留不想要删除的行:
# 保留除第 3 行外的所有行
awk 'NR!=3' filename.txt > tmp && mv tmp filename.txt
# 保留除第 1-5 行外的所有行
awk 'NR<1 || NR>5' filename.txt > tmp && mv tmp filename.txt
说明:
- NR
表示当前行号。
- 操作后需重定向到临时文件再覆盖原文件。
head
和 tail
组合删除第 N 行(例如第 3 行):
# 保留第1-2行和第4行之后的内容
head -n 2 filename.txt > tmp && tail -n +4 filename.txt >> tmp && mv tmp filename.txt
说明:
- head -n 2
:提取前 2 行。
- tail -n +4
:从第 4 行开始提取到文件末尾。
vim
编辑器vim filename.txt
在 Vim 中执行:
:5d " 删除第 5 行
:2,4d " 删除第 2-4 行
:g/pattern/d " 删除匹配 pattern 的行
保存退出::wq
。
bash
cp filename.txt filename.txt.bak
sed -i
或 awk
适合大文件,vim
适合小文件交互式编辑。删除 log.txt
的第 1 行和 5-10 行:
sed -i '1d;5,10d' log.txt
选择最适合你需求的方法即可!