OSX & SED - 删除文档目录中第 25 行之后的所有行
OSX & SED - Delete all lines after line 25 in a directory of documents
我有一个包含数千个 txt 文件的目录。我需要 trim 文件,以便删除每个文件中第 25 行之后的每一行。我正在使用 Mac OSX 10.14.6.
我该怎么做?
我做过的尝试
经过研究,我认为 Mac OSX 终端中的 SED 是执行此操作的最佳方式。
This page 给出了有关如何在 SED 中定位行的示例。所以我认为我需要的 SED 命令是:
sed '1,25!d'
这告诉 SED 删除除第 1 行到第 25 行之外的所有内容。当我在单个文件上尝试它时,它起作用了。
我现在需要扩展它以便它可以在文件目录中工作。
This answer 说我可以使用 SED 的 -n 和 -i 标志来做到这一点(它还提到了一个 -s 标志,它在 OSX 上不起作用)。
所以我觉得代码应该是这样的:
sed -n -i '1,25!d' *.txt
但是当我尝试时,我得到这个错误:
sed: 1: "filename": command a expects \ followed by text
我尝试了其他变体,但 none 似乎有效。
最好使用 q
命令而不是 d
以加快执行速度,并像这样使用 find + xargs
进行管道传输:
cd some_dir
find . -type f -print0 | xargs -0 -n1 sed -i.bak '25q'
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
我有一个包含数千个 txt 文件的目录。我需要 trim 文件,以便删除每个文件中第 25 行之后的每一行。我正在使用 Mac OSX 10.14.6.
我该怎么做?
我做过的尝试
经过研究,我认为 Mac OSX 终端中的 SED 是执行此操作的最佳方式。
This page 给出了有关如何在 SED 中定位行的示例。所以我认为我需要的 SED 命令是:
sed '1,25!d'
这告诉 SED 删除除第 1 行到第 25 行之外的所有内容。当我在单个文件上尝试它时,它起作用了。
我现在需要扩展它以便它可以在文件目录中工作。
This answer 说我可以使用 SED 的 -n 和 -i 标志来做到这一点(它还提到了一个 -s 标志,它在 OSX 上不起作用)。
所以我觉得代码应该是这样的:
sed -n -i '1,25!d' *.txt
但是当我尝试时,我得到这个错误:
sed: 1: "filename": command a expects \ followed by text
我尝试了其他变体,但 none 似乎有效。
最好使用 q
命令而不是 d
以加快执行速度,并像这样使用 find + xargs
进行管道传输:
cd some_dir
find . -type f -print0 | xargs -0 -n1 sed -i.bak '25q'
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