10Kテキストファイルを含むフォルダがあるとしましょう。すべて削除したいスペース、 商標そして線を越えて各ファイルから。
これをどのように効率的に実行できますか?
答え1
あなたはそれを使用することができますtr
:
LC_ALL=C tr -d '[:blank:]\n' < file_in > file_out
10,000個のファイルを処理する必要がある場合、より良い解決策は次のとおりです。
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
。.bak
これを行うには、次を繰り返し使用します。
sed -i.bak ':a;N;$!ba;s/[\n \t]//g' $(find . -type f)
答え3
ファイルの内容を処理する速度で判断すると、tr
正規表現ソリューションよりも高速または類似しているようです。perl
sed
tr
1万個を超えるファイルを繰り返す場合、プロセスが で処理されるため、できることが多くないので、stdin
何をしてもstdout
10,000回を生成することになります。これはtr
これを行うためのfind . -maxdepth -exec
良い方法です。