Sed-Befehl zur Leistungsverbesserung oder tr-Befehl zur gleichen

Sed-Befehl zur Leistungsverbesserung oder tr-Befehl zur gleichen

Ich habe einen Befehl zum Ersetzen der nicht druckbaren Zeichen und einfachen Anführungszeichen in einer Datei, die Ausführung dauert jedoch länger, da ich diese Zeichen für mehrere Dateien ersetze und die Dateigröße etwa 30 GB beträgt.

LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml

Die $pathund $1die Übergabeparameter. Wie kann ich den Vorgang beschleunigen und gibt es einen anderen Befehl, den ich verwenden kann? Ich habe gehört, dass der trBefehl im Vergleich zu schneller ist, aber wie kann ich den Befehl in meiner Situation sedverwenden ? ( Befehl in einer Zeile für alle Dateien).trtr

Ich habe diesen Befehl ausprobiert:

LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/&apos;//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/&apos;//g' <     $path/EID456_$1.xml > $path/EID456_$1_new.xml;
mv -f $path/EID456_$1_new.xml EID456_$1.xml 

für jede einzelne Datei ohne die Option „i“, aber es liefert nicht das erwartete Ergebnis und ich konnte immer noch die nicht druckbaren Zeichen in der Datei sehen.

Antwort1

Binäre Eingabedateifoo, und für jedes Zeichen, das nicht druckbar ist (oder eine Art Leerzeichen), ersetzen Sie dieses Zeichen durch ein Leerzeichen und senden Sie die Ausgabe an die Pipe, wo ein weiterestrersetzt einfache Anführungszeichen durch Leerzeichen und gibt diese dann aus anBar.

tr --complement '[:print:]'  ' ' < foo | tr "'"  ' ' > bar

verwandte Informationen