2011-10-07 18 views
7

Tengo un archivo txt llamado COPYING que se edita en Windows. Contiene el estilo de Windows eolCómo encontrar y eliminar los caracteres invisibles en el archivo de texto usando emacs

$ file COPYING 
COPYING: ASCII English text, with CRLF line terminators 

He intentado convertirlo al estilo de Unix con dos2unix. A continuación se muestra la salida

$ dos2unix COPYING 
dos2unix: Skipping binary file COPYING 

Me sorprendió encontrar que el programa dos2unix lo informa como un archivo binario. Luego, usando algún otro editor (no emacs) encontré que el archivo contiene un caracter de control. Estoy interesado en encontrar todos los personajes invisibles en el archivo usando emacs.

por google he encontrado la siguiente solución que utiliza tr

tr -cd '\11\12\40-\176' < file_name 

Cómo hacer la misma en forma de emacs. Probé el modo hexl. El modo hexadecimal muestra el texto y sus valores ascii correspondientes en un solo búfer, lo que es genial. Cómo encontrar los caracteres que tienen valores ASCII distintos de 11-12, 40-176 (es decir, tabulación, espacio y caracteres visibles). Traté de crear una expresión regular para esa búsqueda, pero es bastante complicado.

Respuesta

2

Emacs no ocultará ningún carácter por defecto. Prensa Ctrl +Meta + %, o Esc continuación Ctrl +% si el primero es demasiado duro con los dedos, o M-x replace-regexp RET si lo prefiere. Luego, por la expresión regular, introduzca

[^@-^H^K-^_^?] 

Sin embargo, cuando escribí ^H, tipo Ctrl + Q continuación Ctrl + H, para introducir un carácter de “control-H”, literalmente, y de manera similar para los demás.Puede pulsar Ctrl + Q continuación Ctrl +espacio para^@, y por lo general Ctrl +Q continuación Retroceso para ^?. Reemplaza todas las ocurrencias de esta expresión regular por la cadena vacía.

Como tiene el archivo abierto en Emacs, puede cambiar las terminaciones de línea mientras lo hace. Prensa C-x RET f (Ctrl +XVolverF) e introduzca us-ascii-unix como la nueva codificación deseada para el archivo.

+0

Gracias por la respuesta. Quería entender lo que hace la expresión regular. Escribí el comando "describe-character-set" y luego seleccioné el "ascii" para ver el conjunto de caracteres. ¿Podría explicar por qué perdió el C-j y dónde el C-? está documentado. –

+0

@Talespin_Kit 'C-i' es una pestaña,' C-j' es nueva línea. – Gilles

+0

Este enlace http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html dice que C-m es para la tecla RET. No puedo encontrar el documento donde C-? está documentado. ¿Podrías por favor señalarlo? –

0

Echa un vistazo M-x set-buffer-file-coding-system. A partir de la documentación:

(set-buffer-file-coding-system CODING-SYSTEM &optional FORCE NOMODIFY)

Establecer el archivo de codificación del sistema de la memoria intermedia actual para coding-system. Esto significa que cuando guarde el búfer, se convertirá de acuerdo con CODING-SYSTEM. Para obtener una lista de valores posibles de CODING-SYSTEM, use M-x list-coding-systems.

Así que, yendo de DOS a UNIX, M-x set-buffer-file-coding-system unix.

10

Para ver los caracteres invisibles, puede intentar whitespace-mode. Los espacios y pestañas se mostrarán con un símbolo en una cara diferente. Si el sistema de codificación se detecta automáticamente como dos (que muestra (DOS) en la barra de estado), los retornos de carro al final de una línea también se ocultarán. Ejecute revert-buffer-with-coding-system para cambiarlo a Unix o binario (por ejemplo, C-x RET r unix) y siempre aparecerán como ^M. El sistema de codificación binario también mostrará los caracteres que no sean ASCII como caracteres de control.

+0

Todos los caracteres no aparecen como^M. Tengo un archivo muy grande que puedo ver algunos de los personajes como^L. No sé cuántos de esos personajes hay en el archivo. Quiero buscar esos personajes. –

+0

El modo de espacio en blanco de Meta-x es la forma de desbloquear este comando. – DragonLord

Cuestiones relacionadas