1 votos

¿Por qué es la sed la salida no de texto?

Tengo un archivo de texto que tengo que quitar las comillas dobles. He encontrado esta pregunta que sugirió el uso de los siguientes:

sed 's/"//g' < infile > outfile

Yo entiendo lo que se está haciendo como el que estoy familiarizado con Vim. Pero el archivo de salida tiene cero bytes después de que se ejecuta el comando.

Probé la otra sugerencia de esa pregunta:

tr -d \" < infile > outfile

Esto resulta en un error:

tr: Illegal byte sequence

Tenga en cuenta que cuando abro el archivo en MacVim y uso

:%s /"//g

funciona a la perfección.

¿Hay alguna diferencia en macOS s sed? Cualquier otra sugerencia sobre cómo puedo hacer esto?

2voto

Nate Puntos 220

Al parecer, el archivo está en formato UTF-16, pero la mayoría del texto-herramientas de manipulación en macOS no saben cómo trabajar con eso y tergiversar los archivos en caso de que trate. UTF-16 utiliza dos bytes por carácter; para la llanura de caracteres ASCII como ", es el único byte de código ASCII seguido de un byte null. Algo como tr -d \" eliminará el primer byte, dejando a un perro callejero byte nulo y tirar el resto de todo el archivo por un byte.

Creo que se puede conseguir en perl para trabajar en UTF-16 (ver aquí), pero no estoy seguro del ins y outs. Este podría trabajar (basado en este):

perl -pe 'BEGIN { binmode $_, ":raw:encoding(UTF-16LE)" for *STDIN, *STDOUT }; s/"//g;' infile >outfile

Usted puede también convertir a UTF-8 y la espalda con

iconv -f UTF-16LE -t UTF-8 infile | tr -d \" | iconv -f UTF-8 -t UTF-16LE >outfile

Si la salida no necesita estar en UTF-16, puede dejar el pasado iconv .

1voto

elgrego Puntos 23

Bueno, no sé exactamente por qué está sucediendo este problema, a pesar de que encontré un poco más de información aquí y aquí, ninguno de los cuales trabajó. Creo que es la codificación y que el LC_CTYPE=C podría estar en el camino correcto, sino que convierte el texto en algo completamente diferente a causa de algún tipo de codificación problema.

Independientemente, hice resolver, al menos, por ahora, con esto:

vim -c '%s /"//g|wq' infile

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X