Vimでファイルを開くと、奇妙な^M
文字が表示されます。
残念ながら、世界で人気のある検索エンジンはクエリ内の特殊文字ではうまく機能しないため、ここで質問します:
-
これは何ですか
^M
文字? -
どうやってそこにたどり着いたのですか?
-
どうすればそれを取り除くことができますか?
コメント
回答
^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
-
-b
バイナリモード -
%
すべての行を選択 -
s
置換 -
\r
キャリッジリターン -
x
保存して閉じる
回答
〜/ .vimrcに次の行を追加します
command! Tounix :call Preserve("1,$s/^M//")
次に、Windowsの行末のファイルがある場合は、コマンド「:Tounix」を実行します。
回答
過去に、構成ファイルでさえ適切に解析されず、空白について文句を言うのを見たことがありますが、空白を表示しないセットリストを実行すると、grepファイル名[[space]]に^ M
が表示されます。dos2unix file
が役立つ場合
コメント
- この回答は何も新しいものではありません。does2unixは、少なくとも2つの回答ですでに言及されています。
help digraph-table
。