sed 删除指定行

sed 删除指定行

sed 是 Linux 下最常用的流编辑器之一,配合 -i 参数可以直接修改文件。删除行是最常见的操作之一,下面列出三种常用场景。

删除第一行

1
sed -i '1d' filename

1d 表示 delete 第 1 行。常用于去掉 CSV 的表头、日志文件的时间戳行等。

删除第 n 行

1
2
sed -i '5d' filename   # 删除第 5 行
sed -i '3,7d' filename # 删除第 3 到 7 行

删除最后一行

1
sed -i '$d' filename

$ 在 sed 中表示最后一行。常用于去掉文件末尾的空行或汇总行。

其他常用删除技巧

命令 作用
sed -i '/^$/d' filename 删除所有空行
sed -i '/^#/d' filename 删除所有以 # 开头的注释行
sed -i '/pattern/d' filename 删除包含 pattern 的行
sed -i '1,10d' filename 删除前 10 行

macOS 注意事项

macOS 的 BSD sed 要求 -i 后面必须跟备份后缀(即使是空的也要写 ''):

1
2
sed -i '' '1d' filename   # macOS
sed -i '1d' filename # Linux

小结

sed 删除行的核心就是 [行号]d。配合正则还可以按内容删,配合范围可以批量删,是处理文本文件时最高效的工具之一。