Ich muss einige nicht druckbare Zeichen durch Leerzeichen in der Datei ersetzen.
Genauer gesagt, werden alle Zeichen von 0x00bis zu 0x1F, mit der Ausnahme 0x09(TAB), 0x0A(neue Zeile), 0x0D(CR)
Bis jetzt musste ich nur den 0x00Charakter ersetzen . Da mein vorheriges Betriebssystem AIX war (ohne GNU-Befehle), kann ich es nicht verwenden sed(nun, ich kann, aber es hatte einige Einschränkungen). Also fand ich den nächsten Befehl mit perl, der wie erwartet funktionierte:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Jetzt arbeite ich unter Linux und habe erwartet, dass ich den sedBefehl verwenden kann.
Meine Fragen:
Ist dieser Befehl geeignet, um diese Zeichen zu ersetzen? Ich habe es versucht und es scheint zu funktionieren, aber ich möchte sichergehen:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTIch dachte
perl -pfunktioniert wiesed. Warum funktioniert der vorherige Befehl (zumindest schlägt er nicht fehl) und der nächste nicht?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTEs sagt mir:
sed: -e Ausdruck # 1, char 34: Ungültiges Kollatierungszeichen
perl -pdruckt das Endprodukt aus,stdinnachdem Sie die gewünschten Vorgänge ausgeführt haben. In diesem Fall handelt es sich nur um einen Ersatz.sedDer reguläre Ausdruck könnte anders sein alsperl.