2011-10-07 12 views
7

Ho un file txt denominato COPYING che viene modificato su Windows. Contiene windows style eolCome trovare e rimuovere i caratteri invisibili nel file di testo utilizzando emacs

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

Ho provato a convertirlo in stile unix utilizzando dos2unix. Il sotto è l'uscita

$ dos2unix COPYING 
dos2unix: Skipping binary file COPYING 

Sono stato sorpreso di scoprire che il programma dos2unix segnala come un file binario. Quindi usando un altro editor (non emacs) ho trovato che il file contiene un carattere di controllo. Sono interessato a trovare tutti i personaggi invisibili nel file usando emacs.

googling ho trovato la seguente soluzione che utilizza tr

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

Come fare lo stesso in emacs modo. Ho provato la modalità hexl. La modalità hexl mostra il testo e i relativi valori ascii corrispondenti in un singolo buffer che è ottimo. Come trovare i caratteri con valori ASCII diversi da 11-12, 40-176 (scheda i.e, spazio e caratteri visibili). Ho provato a creare un'espressione regolare per quella ricerca, ma è piuttosto complicato.

risposta

2

Emacs non nasconde alcun carattere per impostazione predefinita. Premete Ctrl + Meta + %, o Esc poi Ctrl +% se il primo è troppo duro con le dita, o M-x replace-regexp RET, se si preferisce. Poi, per l'espressione regolare, inserire

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

Tuttavia, quando ho scritto ^H, tipo Ctrl + Q poi Ctrl + H, per inserire un carattere “controllo-H”, letteralmente, e allo stesso modo per gli altri.È possibile premere Ctrl + Q poi Ctrl +Spazio per ^@, e di solito Ctrl +Q poi Backspace per ^?. Sostituisci tutte le occorrenze di questa espressione regolare con la stringa vuota.

Dato che il file è aperto in Emacs, è possibile modificare le terminazioni di linea mentre ci si trova. Press C-x RET f (Ctrl +XritornoF) e immettere us-ascii-unix come la nuova codifica desiderata per il file.

+0

Grazie per la risposta. Volevo capire cosa fa l'espressione regolare. Ho digitato il comando "Descrivi-character-set", quindi ho selezionato "ascii" per vedere il set di caratteri. Potresti spiegare perché ti sei perso il C-j e dove il C-? è documentato –

+0

@Talespin_Kit 'C-i' è tab,' C-j' è newline. – Gilles

+0

Questo collegamento http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html dice che C-m è per la chiave RET. Non riesco a trovare il documento dove C-? è documentato Potresti per favore segnalarlo. –

0

Check out M-x set-buffer-file-coding-system. Dalla documentazione:

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

Impostare il file di codifica-system del buffer corrente alla codifica-SYSTEM. Ciò significa che quando si salva il buffer, verrà convertito secondo CODING-SYSTEM. Per un elenco dei possibili valori del SISTEMA DI CODIFICA , utilizzare i sistemi di codifica degli elenchi M-x.

Quindi, passando da DOS a UNIX, M-x set-buffer-file-coding-system unix.

10

Per visualizzare i caratteri invisibili, è possibile provare whitespace-mode. Gli spazi e le schede verranno visualizzati con un simbolo su una faccia diversa. Se il sistema di codifica viene rilevato automaticamente come dos (mostrando (DOS) nella barra di stato), anche i ritorni a capo alla fine di una riga saranno nascosti. Esegui revert-buffer-with-coding-system per passare a Unix o binario (ad esempio C-x RET r unix) e verranno sempre visualizzati come ^M. Il sistema di codifica binaria mostrerà tutti i caratteri non ASCII come caratteri di controllo.

+0

Tutti i caratteri non vengono visualizzati come^M. Ho un file molto grande che posso vedere alcuni dei caratteri come^L. Non so quanti personaggi del genere siano là fuori nel file. Voglio cercare quei personaggi. –

+0

Modalità spazio bianco meta-x è la modalità di sblocco di questo comando. – DragonLord

Problemi correlati