一部のテキストファイルからすべての空白行を削除します。私はそれを行うことができます。テキストファイルの空白を削除するには?
grep '[^[:blank:]]' <file1.dat> file1.dat.nospace
しかし、私はディレクトリ内のn-ファイルでそれを行う必要があります。どうしたらいいですか?
ご協力いただければ幸いです。ありがとう!
一部のテキストファイルからすべての空白行を削除します。私はそれを行うことができます。テキストファイルの空白を削除するには?
grep '[^[:blank:]]' <file1.dat> file1.dat.nospace
しかし、私はディレクトリ内のn-ファイルでそれを行う必要があります。どうしたらいいですか?
ご協力いただければ幸いです。ありがとう!
は道である:ここ
for filename in *.dat; do
grep '[^[:blank:]]' < $filename > $filename.nospace
done
より堅牢な方法があり、より多様な状況で動作するもの:
find . -maxdepth 1 -type f -name "*.dat" | while read filename; do
grep '[^[:blank:]]' < "$filename" > "$filename.nospace"
done
ここでは、はるかに高速な方法です(実行時にもタイピングでも)。これは私が実際にそれを行うだろう方法です:
ここfind *.dat -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh
は、より堅牢なバージョンです:
find . -maxdepth 1 -type f -name "*.dat" -printf "grep '[^[:blank:]]' < \"%f\" > \"%f.nospace\"\n" | sh
PS:ここでは空白でない行の実際の正しいグレップです:
grep -v '^$' < $filename > $filename.nospace
あなたはおそらくあなたを助けることができるfind
find . -name '*.dat' -exec sed -i.bak '/^[[:blank:]]*$/d' {} +
これは要求された結果を与えません - それはサブディレクトリに降りて、新しい '.nospace'を作るのではなくオリジナルの名前を.bak'に変更します。それは一般的にはより優れたテクニックであり、私はそれを私の答えの3倍の速さでベンチマークしました(3秒対7000ファイルの9秒、合計73MB)。 – webb
@webbいいえファイルの名前を変更しません。 OPが元のファイルにアクセスしたがっている何かがうまくいかない場合、シナリオのための拡張子が.bakのオリジナルファイルを保持するだけです。 – anubhava
サブディレクトリへの降下を防ぐため、 'find'に' -maxdepth 1'オプションを追加するだけです。 – anubhava
このonelinerでそれを使用することができます。
ここfor a in /path/to/file_pattern*; do sed "/^\s*$/d" $a > $a.nospace;done
単純な 'sed'コマンドを使って' grep'を実行できるのはなぜですか?下の私の答えを見てください。 – anubhava
これは私が探していたものです、ありがとう! – NicolasG
行が空白で始まる場合にのみ、これは実際に空白行をチェックしていないことに注意してください。 –