Мне нужно заменить некоторые непечатаемые символы пробелами в файле.
В частности, все символы от 0x00
до 0x1F
, кроме 0x09
(TAB), 0x0A
(новая строка), 0x0D
(CR)
До сих пор мне просто нужно было заменить 0x00
персонажа. Поскольку моя предыдущая ОС была AIX (без команд GNU), я не могу использовать sed
(ну, я могу, но у нее были некоторые ограничения). Итак, я нашел следующую команду с помощью perl
, которая работала как ожидалось:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Сейчас я работаю над Linux, поэтому я ожидал, что смогу использовать sed
команду.
Мои вопросы:
Подходит ли эта команда для замены этих символов? Я пытался, и это похоже на работу, но я хочу убедиться:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Я думал
perl -p
работает какsed
. Итак, почему предыдущая команда работает (по крайней мере, она не дает сбоя), а следующая нет?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUT
Это говорит мне:
sed: -e выражение # 1, символ 34: недопустимый символ сопоставления
perl -p
печатает конечный продуктstdin
после выполнения необходимых операций, в данном случае это просто замена.sed
регулярное выражение может отличаться отperl
.