Ich muss einige nicht druckbare Zeichen durch Leerzeichen in der Datei ersetzen.
Genauer gesagt, werden alle Zeichen von 0x00
bis zu 0x1F
, mit der Ausnahme 0x09
(TAB), 0x0A
(neue Zeile), 0x0D
(CR)
Bis jetzt musste ich nur den 0x00
Charakter 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 sed
Befehl 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_OUT
Ich dachte
perl -p
funktioniert 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_OUT
Es sagt mir:
sed: -e Ausdruck # 1, char 34: Ungültiges Kollatierungszeichen
perl -p
druckt das Endprodukt aus,stdin
nachdem Sie die gewünschten Vorgänge ausgeführt haben. In diesem Fall handelt es sich nur um einen Ersatz.sed
Der reguläre Ausdruck könnte anders sein alsperl
.