
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 $path
und $1
die Übergabeparameter. Wie kann ich den Vorgang beschleunigen und gibt es einen anderen Befehl, den ich verwenden kann? Ich habe gehört, dass der tr
Befehl im Vergleich zu schneller ist, aber wie kann ich den Befehl in meiner Situation sed
verwenden ? ( Befehl in einer Zeile für alle Dateien).tr
tr
Ich habe diesen Befehl ausprobiert:
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
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