首页 > 解决方案 > OSX & SED - 删除文档目录中第 25 行之后的所有行

问题描述

我有一个包含数千个 txt 文件的目录。我需要修剪文件,以便删除每个文件中第 25 行之后的每一行。我正在使用 Mac OSX 10.14.6。

我怎样才能做到这一点?


我所做的尝试

经过研究,我认为 Mac OSX 终端中的 SED 是最好的方法。

本页提供了有关如何在 SED 中定位行的示例。所以我认为我需要的 SED 命令是:

sed '1,25!d'

这告诉 SED 删除除第 1 行到第 25 行之外的所有内容。当我在单个文件上尝试时,它可以工作。

我现在需要扩展它,以便它适用于文件目录。

这个答案说我可以使用 SEDs -n 和 -i 标志来做到这一点(它还提到了在 OSX 上不起作用的 -s 标志)。

所以我认为代码应该是这样的:

sed -n -i '1,25!d' *.txt

但是当我尝试它时,我得到了这个错误:

sed: 1: "filename": command a expects \ followed by text

我尝试了其他变体,但似乎没有一个有效。

标签: macossed

解决方案


MacOS 使用 BSD sed,而不是 GNU sed:阅读man sed

-i选项需要BSD sed 中的参数。如果您不想要文件的备份副本,则参数为空字符串:

$ seq 50 | tee file1 > file2

$ wc file1 file2
 50  50 141 file1
 50  50 141 file2
100 100 282 total

$ sed -i '' -n '1,25p' file1 file2

$ wc file1 file2
 25  25  66 file1
 25  25  66 file2
 50  50 132 total

推荐阅读