
ファイルから印刷できない文字と一重引用符を置き換えるコマンドがありますが、複数のファイルでこれらの文字を置き換えており、ファイル サイズが約 30 GB であるため、実行に時間がかかります。
LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml
およびパラメータ$path
の$1
受け渡し。 プロセスを高速化するにはどうしたらよいですか。また、他に使用できるコマンドはありますか。tr
コマンドは と比較して高速であると聞きましたが、私の状況では コマンドsed
をどのように使用すればよいですかtr
。 (tr
すべてのファイルに対して 1 行のコマンド)。
このコマンドを試しました:
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID123_$1.xml > $path/EID123_$1_new.xml
mv -f $path/EID123_$1_new.xml EID123_$1.xml
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/'//g' < $path/EID456_$1.xml > $path/EID456_$1_new.xml;
mv -f $path/EID456_$1_new.xml EID456_$1.xml
i オプションを使用せずに各ファイルに対して実行しましたが、期待どおりの結果が得られず、ファイル内に印刷できない文字がまだ表示されています。
答え1
入力バイナリファイルフー、そして、印刷できない文字(または何らかのスペース)については、その文字をスペースに置き換え、出力をパイプに送信します。trシングルクォートをスペースに置き換えて出力しますバー。
tr --complement '[:print:]' ' ' < foo | tr "'" ' ' > bar