Мне нужно заменить некоторые непечатаемые символы пробелами в файле.
В частности, все символы от 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.