Necesito reemplazar algunos caracteres no imprimibles con espacios en el archivo.
Específicamente, todos los caracteres de 0x00
hasta 0x1F
, excepto 0x09
(TAB), 0x0A
(nueva línea), 0x0D
(CR)
Hasta ahora, solo necesitaba reemplazar el 0x00
personaje. 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 sed
comando.
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_OUT
Pensé que
perl -p
funciona 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_OUT
Me dice:
sed: -e expresión # 1, char 34: Carácter de intercalación no válido
perl -p
imprime el producto final destdin
después de hacer las operaciones que desea, en este caso es solo reemplazo.sed
La expresión regular podría ser diferente aperl
.