ファイルから印刷できない文字と一重引用符を置き換えるコマンドがあります。複数のファイルに対してこれらの文字を置き換えてファイルサイズが約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 --complement '[:print:]' ' ' < foo | tr "'" ' ' > bar