2011-10-07 9 views
7

私はWindows上で編集されたCOPYINGというtxtファイルを持っています。それはWindowsスタイルのeolを含んでいますemacsを使ってテキストファイル内の見えない文字を見つけて削除する方法

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

dos2unixを使ってUNIXスタイルに変換しようとしました。以下は出力です

私はdos2unixプログラムがバイナリファイルとして報告していることに驚いていました。次に、他のエディタ(Emacsではなく)を使用して、ファイルに制御文字が含まれていることがわかりました。私はemacsを使ってファイル内のすべての見えない文字を見つけることに興味があります。私はemacsの方法で同じことを行うにはどのようにTR

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

を使用して、次の解決策を発見したグーグルによって

。私はhexlモードを試みました。 hexl-modeはテキストとそれに対応するASCII値を単一のバッファに表示します。 11-12,40-176以外のASCII値(タブ、スペース、可視文字など)を持つ文字の検索方法私はその検索のための正規表現を作成しようとしましたが、それはかなり複雑です。

答えて

2

デフォルトでは、Emacsは文字を非表示にしません。プレスはCtrl +メタ + %、またはEscキーその後、はCtrl +%ご希望の場合は前者があなたの指、またはM-x replace-regexp RETに硬すぎます。その後、正規表現のために、しかし、私は^Hを書いた、タイプCtrlキー + Q文字通り「コントロール-H」の文字を入力するには、その後はCtrl + H

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

を入力し、他のものについても同様である。あなたは^?のためにバックスペース、その後^@のためのスペースはCtrl +その後、はCtrl +Qを押すと、通常は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を実行してUnixまたはバイナリに切り替えます(例:C-x RET r unix)。これらは常に^Mと表示されます。バイナリコーディングシステムでは、非ASCII文字も制御文字として表示されます。

+0

すべての文字は^ Mとして表示されません。私は非常に大きなファイルを持っていますが、文字の一部を^ Lと見ることができます。私はこのような文字がファイル内にいくつあるか知りません。私はそれらの文字を検索したい。 –

+0

このコマンドのロックを解除する方法は、Meta-x空白モードです。 – DragonLord

関連する問題