假设我有一个包含 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
.如果您不想备份,只需使用-i
without即可。.bak
要做到这一点,请反复使用:
sed -i.bak ':a;N;$!ba;s/[\n \t]//g' $(find . -type f)
答案3
从处理文件内容的速度来看,我认为它比或类似的tr
正则表达式解决方案更快。perl
sed
至于循环超过一万个文件,你无能为力,因为tr
will process stdin
to ,所以无论你做什么,stdout
你都会生成10k 次。tr
为此,find . -maxdepth -exec
这是一个很好的方法。