`^ M`とは何ですか?どうすれば削除できますか?


134

でファイルを開くと、vim奇妙な^M文字が表示されます。

残念ながら、世界で人気のある検索エンジンは、クエリ内の特殊文字ではうまく機能しないため、ここで質問しています:

  • この^Mキャラクターは何ですか?

  • どうしてそこに着いたのでしょうか?

  • どうすればそれを取り除くことができますか?


3
無意味な編集だったVlastimil。Gotは、英国英語での取得の過去形です。
Jesse_b

1
詳細については、制御文字のダイグラフです help digraph-table
エリックレシンスキー

回答:


108

^Mキャリッジリターン文字です。これを見ると、おそらくDOS / Windowsの世界で作成されたファイルを見ていることになります。Unixの世界では、行の終わりは改行でマークされていますが、単一の改行でマークされています。

詳細についてはこの記事を、またnewlineについてはウィキペディアのエントリをお読みください。

この記事では、さまざまな行末マーカーを持つファイルを透過的に編集するためのvimのセットアップ方法について説明します。

^Mいくつかの行の末尾にファイルがあり、それらを削除したい場合は、Vimでこれを使用します。

:s/^M$//

(プレスCtrl+ V Ctrl+ Mそれを挿入します^M。)


11
:%s/^M/\r/g代わりに、削除^M^Mて改行文字に置き換えてください\r。を指定しない%場合、コマンドは現在の行にのみ適用されます。そして、私は次のような^M行末ではないいくつかの例に出くわしましたThe first line.^MThe second line.
ジョージ

または、:%s/^M/
大量の

2
それ自体が単なる改行である場合、それは古典的な(Unixより前の)Macintosh改行かもしれません。Excel 2007 for Macのようないくつかの新しいプログラムでさえ、何らかの理由でそれを行います。
須藤

@larsksしかしaltap.cz/salamander/help/salamand/appendix_txtfilesはそれを言う^MUNIXで使用されている
のVivek

あなたがリンクした記事\nは、Unixで使用されていると言っていますが、これは正しいです。これは、ASCIIコードで10、それ以外として知られています^J
-larsks

39

ほとんどのUNIXオペレーティングシステムにはdos2unix、CRLFをLFに変換するというユーティリティがあります。他の答えは、「彼らは何ですか」という質問をカバーしています。


36

これを行う簡単な方法は、次のコマンドを使用することです。

dos2unix filename

このコマンドはパスパターンでも機能します。たとえば、

dos2unix path/name*

動作しない場合は、別のモードを試してください:

dos2unix -c mac filename
  • -c変換モードを設定します。:CONVMODEは、のいずれかですascii, 7bit, iso, macasciiデフォルトです。

22

これは私のために働いた

:e ++ff=dos 

:e ++ ff = dosコマンドは、Vimにファイルを再度読み取り、dosファイル形式を強制するように指示します。Vimは、CRLFおよびLFのみの行末を削除し、バッファ内の各行のテキストのみを残します。

それから

:set ff=unix 

そして最後に

:wq 

3
ありがとう!これは私にとっては
うまくいき

DOESは、ff形式をファイルを参照しますか?どう++ff
KcFnMi

:e ++ ff = dosコマンドは、Vimにファイルを再度読み取り、dosファイル形式を強制するように指示します。Vimは、CRLFおよびLFのみの行末を削除し、バッファ内の各行のテキストのみを残します。
ストライカー

10

キャリッジリターンを取り除くもう1つの方法は、trコマンドを使用することです。

このような小さなスクリプトがあります

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

これをクリーンアップできますsed

sed -e 's/^M$//' < infile > outfile

トリックは、キャリッジリターンを適切に入力する方法です。通常、C-v C-mリテラルのキャリッジリターンを入力するには、入力する必要があります。また、次のコマンドを使用してsed作業を行うこともできます。

sed -i.bak -e 's/^M$//' infile

2

この^ Mとは何ですか?
^ Mは復帰文字です。これを見ると、おそらくDOS / Windowsの世界で作成されたファイルを見ていることになります。Unixの世界では、行の終わりは改行でマークされていますが、単一の改行でマークされています。

どうしてそこにたどり着いたのでしょうか?
ファイル形式に変更がある場合。

どうすればそれを取り除くことができますか?
でファイルを開く

vim -b FILE_PATH

次のコマンドで保存します

:%s/^M//g

filrを開くときにタイプミスがあります
マテウスピオトロフスキ

4
この回答は、他の回答に何も追加しません。最初の段落は、受け入れられた回答からのほぼ逐語的なコピーです。指定されたコードは何も保存しませんが、すべての行からすべての復帰文字を削除します。また、ここでファイルをバイナリモードで開くことがどのように役立つかわかりません。
ドゥブ

2

私の場合、

上記の何も機能せず、CSVファイルをMacからLinuxマシンにコピーし、上記のすべてのコマンドを使用しましたが、何も役に立たなかった

tr "\015" "\n" < inputfile > outputfile

^ M文字が次のような行間でサンドウィッチされたファイルがありました

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

ExモードでVimを使用できます。

ex -bsc '%s/\r//|x' file
  1. -b バイナリモード

  2. % すべての行を選択

  3. s 代替

  4. \r キャリッジリターン

  5. x 保存して閉じます


0

〜/ .vimrcに次の行を追加します

command! Tounix :call Preserve('1,$s/^M//')

次に、Windowsの行末を含むファイルがある場合、コマンド ":Tounix"を実行します。


-1

過去に、構成ファイルでさえも適切に解析されず、空白について文句を言うのを見てきましたが、viを実行してセットリストを実行しても空白が表示されない場合、grep filename [[space]]は^ Mを表示します

それがdos2unix file役立つときです


この回答は新しいものをもたらすものではありません。dos2unixは少なくとも2つの回答で既に言及されています。
ルイFリベイロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.