2011-10-07 4 views
7

Windows에서 편집되는 COPYING이라는 txt 파일이 있습니다. 그것은 windows 스타일 eol을 포함합니다.emacs를 사용하여 텍스트 파일에서 보이지 않는 문자를 찾아 제거하는 방법

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

dos2unix를 사용하여 유닉스 스타일로 변환하려고했습니다. 아래는 내가 그 DOS2UNIX 프로그램을 찾을 수 놀랐습니다

$ dos2unix COPYING 
dos2unix: Skipping binary file COPYING 

는 이진 파일로보고 출력을합니다. 그런 다음 다른 편집기 (emacs가 아닌)를 사용하여 파일에 제어 문자가 들어 있음을 발견했습니다. emacs를 사용하여 파일에있는 모든 보이지 않는 문자를 찾는 데 관심이 있습니다. 내가 이맥스 방법으로 동일한 작업을 수행하는 방법

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

그럴

을 사용하여 다음과 같은 해결책을 발견 한 인터넷 검색으로

. 나는 헥스 모드를 시도했다. 16 진수 모드는 텍스트와 해당 ASCII 값을 단일 버퍼에 표시합니다. 11-12, 40-176 이외의 ASCII 값 (예 : 탭, 공백 및 보이는 문자)이있는 문자를 찾는 방법. 그 검색에 대한 정규 표현식을 만들려고했으나 매우 복잡합니다.

답변

2

이맥스는 기본적으로 어떤 문자도 숨기지 않습니다. 보도 Ctrl 키 + 메타 + 퍼센트, 또는 Esc를 다음 Ctrl 키 + 퍼센트 원하는 경우 전자가 손가락 또는 M-x replace-regexp RET에 너무 힘들 때. 그런 다음, 정규 표현식, 그러나

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

를 입력, 내가 ^H 쓴 경우, 유형 Ctrl 키 + Q 다음 Ctrl 키 + H하는 "제어-H"문자를 입력하는 문자 그대로, 다른 것들도 마찬가지입니다.당신은 ^@에 대한 Ctrl 키 + 에게 Q 다음 Ctrl 키 + 공간을 누르고, ^?에 대한 일반적 Ctrl 키 + Q 다음 백 스페이스 수 있습니다. 이 정규식의 모든 어커런스를 빈 문자열로 바꿉니다.

Emacs에서 파일을 열었으므로 라인 엔딩을 변경할 수 있습니다. 보도 C-x RET f (Ctrl 키 + X반환F) 및 파일에 대한 새로운 원하는 인코딩으로 us-ascii-unix를 입력합니다.

+0

답변 주셔서 감사합니다. 나는 정규식이 무엇을하는지 이해하기를 원했다. 필자는 "describe-character-set"명령을 입력 한 다음 "ascii"를 선택하여 문자 집합을 보았습니다. C-j를 놓친 이유와 C-가 어디에 있는지 설명해주십시오. 문서화되어 있습니다. –

+0

@Talespin_Kit'C-i'는 탭이고,'C-j'는 개행입니다. – Gilles

+0

이 링크 http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html에 따르면 C-m은 RET 키입니다. 나는 의사에게 C-를 찾을 수 없다. 문서화되어 있습니다. 당신이 그것을 지적하시기 바랍니다 수 있습니다. –

0

체크 아웃 M-x set-buffer-file-coding-system. 문서에서 :

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

CODING-SYSTEM 현재 버퍼의 파일 코딩 시스템을 설정합니다. 버퍼를 저장할 때 CODING-SYSTEM에 따라 으로 변환됩니다. CODING-SYSTEM의 가능한 값 목록을 보려면 M-x list-coding-systems을 사용하십시오.

따라서 DOS에서 UNIX로가는 경우 M-x set-buffer-file-coding-system unix.

10

보이지 않는 문자를 보려면 whitespace-mode을 시도해보십시오. 공백과 탭은 기호가 다른면에 표시됩니다. 코딩 시스템이 자동으로 dos로 표시되면 (상태 표시 줄에 (DOS) 표시), 줄 끝의 캐리지 리턴도 숨겨집니다. revert-buffer-with-coding-system을 실행하여 유닉스 또는 바이너리 (예 : C-x RET r 유닉스)로 전환하면 항상 ^M으로 표시됩니다. 이진 코딩 시스템은 비 ASCII 문자를 제어 문자로 표시합니다.

+0

모든 문자가^M으로 표시되지 않습니다. 나는 매우 큰 파일을 가지고있어 문자 중 일부를^L로 볼 수있다. 파일에 얼마나 많은 문자가 있는지 알지 못합니다. 나는 그 캐릭터들을 찾고 싶다. –

+0

메타 - 공백 모드는이 명령의 잠금을 해제하는 방법입니다. – DragonLord

관련 문제