Saya perlu mengganti beberapa karakter yang tidak dapat dicetak dengan spasi dalam file.
Secara khusus, semua karakter dari 0x00
hingga 0x1F
, kecuali 0x09
(TAB), 0x0A
(baris baru), 0x0D
(CR)
Sampai sekarang, saya hanya perlu mengganti 0x00
karakter. Karena OS saya sebelumnya adalah AIX (tanpa perintah GNU), saya tidak dapat menggunakan sed
(well, saya bisa tetapi memiliki beberapa keterbatasan). Jadi, saya menemukan perintah berikutnya menggunakan perl
, yang berfungsi seperti yang diharapkan:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Sekarang saya sedang bekerja di Linux, jadi saya diharapkan dapat menggunakan sed
perintah.
Pertanyaan saya:
Apakah perintah ini sesuai untuk mengganti karakter-karakter itu? Saya mencoba, dan tampaknya berhasil, tetapi saya ingin memastikan:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Saya pikir
perl -p
berfungsi sebagaised
. Jadi, mengapa perintah sebelumnya berfungsi (setidaknya, itu tidak gagal), dan yang berikutnya tidak?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Ini memberitahu saya:
sed: -e ekspresi # 1, char 34: Karakter susunan tidak valid
perl -p
mencetak produk akhirstdin
setelah melakukan operasi yang Anda inginkan, dalam hal ini hanya penggantian.sed
Regex mungkin berbeda dariperl
.