Necesito reemplazar algunos caracteres no imprimibles con espacios en el archivo.
Específicamente, todos los caracteres de 0x00hasta 0x1F, excepto 0x09(TAB), 0x0A(nueva línea), 0x0D(CR)
Hasta ahora, solo necesitaba reemplazar el 0x00personaje. Como mi sistema operativo anterior era AIX (sin comandos GNU), no puedo usar sed(bueno, puedo pero tenía algunas limitaciones). Entonces, encontré el siguiente comando usando perl, que funcionó como se esperaba:
perl -p -e 's/\x0/ /g' $FILE_IN > $FILE_OUT
Ahora estoy trabajando en Linux, así que esperaba poder usar el sedcomando.
Mis preguntas:
¿Es este comando apropiado para reemplazar esos caracteres? Lo intenté y parece funcionar, pero quiero asegurarme de que:
perl -p -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTPensé que
perl -pfunciona comosed. Entonces, ¿por qué funciona el comando anterior (al menos, no falla) y el siguiente no?sed -e 's/[\x00-\x08\x0B\x0C\x0E-\x1F]/ /g' $FILE_IN > $FILE_OUTMe dice:
sed: -e expresión # 1, char 34: Carácter de intercalación no válido
perl -pimprime el producto final destdindespués de hacer las operaciones que desea, en este caso es solo reemplazo.sedLa expresión regular podría ser diferente aperl.