插件窝 干货文章 linux怎么删除文件某几行

linux怎么删除文件某几行

filename 删除 文件 txt 873    来源:    2025-05-02

在 Linux 中删除文件的某几行有多种方法,以下是几种常见且高效的方式:


1. 使用 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:表示删除操作。


2. 使用 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 表示当前行号。 - 操作后需重定向到临时文件再覆盖原文件。


3. 使用 headtail 组合

删除第 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 行开始提取到文件末尾。


4. 使用 vim 编辑器

vim filename.txt

在 Vim 中执行:

:5d      " 删除第 5 行
:2,4d    " 删除第 2-4 行
:g/pattern/d  " 删除匹配 pattern 的行

保存退出::wq


注意事项:

  1. 备份文件:直接修改前建议备份: bash cp filename.txt filename.txt.bak
  2. 大文件处理sed -iawk 适合大文件,vim 适合小文件交互式编辑。

示例场景

删除 log.txt 的第 1 行和 5-10 行:

sed -i '1d;5,10d' log.txt

选择最适合你需求的方法即可!