
Tengo un comando para reemplazar los caracteres no imprimibles y las comillas simples de un archivo, pero su ejecución lleva más tiempo ya que estoy reemplazando estos caracteres para varios archivos y el tamaño de los archivos es de alrededor de 30 GB.
LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml
El $path
y $1
pasando por los parámetros. ¿Cómo puedo hacer que el proceso se ejecute más rápido? ¿Hay algún otro comando que pueda usar? Escuché que tr
el comando es más rápido en comparación, sed
pero ¿cómo puedo usarlo tr
en mi situación? ( tr
comando en una sola línea para todos los archivos).
Probé este comando:
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
para cada archivo individual sin la opción i, pero no da el resultado esperado y aún puedo ver los caracteres no imprimibles en el archivo.
Respuesta1
Archivo binario de entradafoo, y para cualquier carácter que no sea imprimible (o algún tipo de espacio), reemplace ese carácter con un espacio y envíe la salida a la tubería, donde otrotrreemplaza las comillas simples con espacios, luego envía eso abar.
tr --complement '[:print:]' ' ' < foo | tr "'" ' ' > bar