从每个文件中删除换行符、空格和制表符

从每个文件中删除换行符、空格和制表符

假设我有一个包含 10K 文本文件的文件夹。我想删除每一个空间, 标签越线从每个文件。

我怎样才能有效地做到这一点?

答案1

您可以使用tr

LC_ALL=C tr -d '[:blank:]\n' < file_in > file_out

由于当您必须处理 10k 个文件时,更好的解决方案是:

find . -type f -exec perl -i.bak -pe 's/ |\t|\n//g' {} +

答案2

你可以使用 GNU sed

$ shopt -s dotglob # includes "hidden" files beginning with .
$ sed -i.bak ':a;N;$!ba;s/[\n \t]//g' *

这将处理文件夹中的所有文件。它存储原始文件的备份,扩展名为.bak.如果您不想备份,只需使用-iwithout即可。.bak

要做到这一点,请反复使用:

sed -i.bak ':a;N;$!ba;s/[\n \t]//g' $(find . -type f)

答案3

从处理文件内容的速度来看,我认为它比或类似的tr正则表达式解决方案更快。perlsed

至于循环超过一万个文件,你无能为力,因为trwill process stdinto ,所以无论你做什么,stdout你都会生成10k 次。tr为此,find . -maxdepth -exec这是一个很好的方法。

相关内容