`^ M`とは何ですか?どうすればそれを取り除くことができますか?

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

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

  • これは何ですか^M文字?

  • どうやってそこにたどり着いたのですか?

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

コメント

  • '制御文字のダイグラフなどinfo:help digraph-table
  • VS Codeの下部には、開いているファイルを自動変換するEOLオプションがあります。
  • @StackUnderflowを使用する場合VSCode、Linuxファイルで作業するときに行末をLFに変更すると役立ちます。私はWSLを使用しています… $ profileのようなWindowsファイルは、LFで終わるLinuxファイルに問題はありません。たぶん、WinはここでLinuxに勝っています。

回答

^Mキャリッジリターン文字です。これが表示された場合は、おそらくDOS / Windowsの世界で作成されたファイルを見ているはずです。ここでは、行末が改行と改行のペアでマークされていますが、Unixの世界では行末です。は1つの改行でマークされます。

詳細についてはこの記事を読み、 newline 。

この記事では、異なるエンドのファイルを透過的に編集するようにvimを設定する方法について説明しています- of-lineマーカー。

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

:s/^M$// 

Ctrl + V Ctrl + を押しますM でその^Mを挿入します。)

コメント

  • :%s/^M/\r/g代わりに^Mを削除し、^Mを改行文字。 %がない場合、コマンドは現在の行にのみ適用されます。また、The first line.^MThe second line.
  • など、^Mが行末にない例をいくつか見つけました。 '大量の改行が必要ない場合は、:%s/^M/
  • 'は、それ自体がキャリッジリターンであり、これは古典的な(Unix以前の)Macintoshの改行である可能性があります。 Mac用のExcel2007のようないくつかの新しいプログラムでさえ、何らかの理由でそれを行います。
  • @larsksしかし、 altap.cz/salamander/help/salamand/appendix_txtfiles は、^MがUNIXで使用されていると言っています
  • 'が私のvim構成にあるかどうかわかりません。ただし、Ctrl+Qと入力してから、Ctrl+Mと入力して、その文字を生成する必要があります。

回答

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

dos2unix filename 

このコマンドはパスパターンでも機能します。例:

dos2unix path/name* 

機能しない場合は、別のモードを使用してみてください。

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

コメント

  • +1は、-cフラグのデフォルト値およびその他のオプションについて言及しています。最初の試行では、デフォルトでは'期待した結果が得られませんでした。 dos2unix -c maxで機能しました。 dos2unix: converting file launch_me.sh to Unix format...
  • 驚くべき小さなユーティリティ。 ubuntuの場合は、apt-get install dos2unixだけです。再帰的に使用する必要がある場合は、次のソリューションを参照できます: stackoverflow.com/questions/11929461/ … 私は愚かにもそれをすべてのディレクトリで手動で実行し、事実の後で調べることだけを考えました。

回答

これは私にとってはうまくいきました

:e ++ff=dos 

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

次に

:set ff=unix 

そして最後に

:wq 

コメント

  • ありがとう!これは私にとってはうまくいきましたが、受け入れられた解決策はうまくいきませんでした
  • ffはファイル形式を参照していますか? ++ffはどうですか?
  • :e ++ ff = dosコマンドは、Vimにファイルを再度読み取るように指示し、dosファイル形式を強制します。 VimはCRLFとLFのみの行末を削除し、各行のテキストのみをバッファーに残します。
  • ffについて学ぶには、":help ff "
  • シンプルで効果的な方法を実行します。 。 cat file1 > > file2がファイル1でdos改行を導入している理由がわかりません'そもそも持っていない

回答

ほとんどのUNIXオペレーティングシステムには、<と呼ばれるユーティリティがあります。 CRLFをLFに変換するdivid = "d5db751990">

。他の回答は「彼らは何ですか」という質問をカバーしています。

回答

キャリッジリターンを取り除く別の方法は、 trコマンド。

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

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

回答

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

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

秘訣は、キャリッジリターンを正しく入力する方法です。通常、文字通りのキャリッジリターンを入力するには、C-v C-mと入力する必要があります。

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

回答

Sedで作業を行うこともできます。 -特殊文字を入力せずにソリューションを配置します(これをコピーして機能します):

sed -i -e "s/\r//g" filename 

説明:

-i: in-place -e: regular expression \r: escaped carriage return /g: replace globally 

コメント

  • 質問者はすでにVIMでファイルを編集していたことに注意してください。そして、2012年以来、ここにsedの回答があります。
  • そうですが、適切で実用的なソリューションがありませんでした。既存のsedソリューションは'すぐに使用できません。
  • Dale Hagglund ' –sedを配置することは間違いなく箱から出してすぐに機能します
  • まあ、私には向いていません。 Ubuntu LTS18.04で' m。
  • これは、WindowsデスクトップからAlpine Linuxで、CtrlMを行の戻りとしてカウントするファイルを編集するのに役立ちました。上記の回答を無効にします。

回答

内容これは^ Mですか?
^ Mはキャリッジリターン文字です。これが表示された場合は、おそらくDOS / Windowsの世界で作成されたファイルを参照しています。このファイルでは、行末がキャリッジリターン/改行のペアでマークされていますが、Unixの世界では行末です。は1つの改行でマークされています。

どうやってそこにたどり着いたのでしょうか?
ファイル形式の変更です。

どうすれば削除できますか?
開いてくださいファイル

vim -b FILE_PATH 

次のコマンドで保存

:%s/^M//g 

コメント

  • 'でタイプミスがありますファイルを開く
  • この回答最初の段落は、受け入れられた回答からほぼ逐語的なコピーです。指定されたコードは何も保存しませんが、すべてのキャリッジリターンを削除します。すべての行の文字。そして、ファイルをバイナリモードで開く方法がわかりません。 elphere。

回答

私の場合、

上記の機能はありません、私はMacからLinuxマシンにCSVファイルをコピーし、上記のすべてのコマンドを使用しましたが、以下のコマンド以外は何も役に立ちませんでした

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, 

コメント

  • mac2unix -n inputfile outputfile、または同等に、dos2unix -c mac -n inputfile outputfileがその状況を処理します。

回答

VimはExモードで使用できます:

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

  2. %すべての行を選択

  3. s置換

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

  5. x保存して閉じる

回答

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

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

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

回答

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

が表示されます。dos2unix fileが役立つ場合

コメント

  • この回答は何も新しいものではありません。does2unixは、少なくとも2つの回答ですでに言及されています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です