sed 删除指定行
sed 删除指定行
sed 是 Linux 下最常用的流编辑器之一,配合 -i 参数可以直接修改文件。删除行是最常见的操作之一,下面列出三种常用场景。
删除第一行
1 | sed -i '1d' filename |
1d 表示 delete 第 1 行。常用于去掉 CSV 的表头、日志文件的时间戳行等。
删除第 n 行
1 | sed -i '5d' filename # 删除第 5 行 |
删除最后一行
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 | sed -i '' '1d' filename # macOS |
小结
sed 删除行的核心就是 [行号]d。配合正则还可以按内容删,配合范围可以批量删,是处理文本文件时最高效的工具之一。