Vimでファイルを開くと、奇妙な^M
文字が表示されます。
残念ながら、世界で人気の検索エンジンはクエリの特殊文字ではうまく機能しないため、ここで質問します。
この^M
文字は何ですか?
どうしてそこに到達できたのでしょうか?
どうすれば取り除くことができますか?
これを行う簡単な方法は、次のコマンドを使用することです。
dos2unix filename
このコマンドはパスパターンでも機能します。
dos2unix path/name*
動作しない場合は、別のモードを使用してみてください。
dos2unix -c mac filename
-c
変換モードを設定します。 CONVMODEは次のいずれかです。ascii, 7bit, iso, mac
ascii
がデフォルトです。ほとんどのUNIXオペレーティングシステムには、CRLFをLFに変換するdos2unix
というユーティリティがあります。他の回答は「彼らは何ですか」という質問をカバーしています。
これは私のために働いた
:e ++ff=dos
:e ++ ff = dosコマンドは、ファイルを再度読み取るようにVimに指示し、dosファイル形式を強制します。VimはCRLFおよびLFのみの行末を削除し、バッファー内の各行のテキストのみを残します。 =
その後
:set ff=unix
そして最後に
:wq
改行を取り除く別の方法は、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作業を行うこともできます。
sed -i.bak -e 's/^M$//' infile
これは^ Mとは何ですか?
^ Mは復帰文字です。これが表示された場合、おそらくDOS/Windowsの世界で発生したファイルを見ており、行末には改行と改行のペアが付いていますが、Unixの世界では単一の改行でマークされています。
どうやってそこに到達できたのでしょうか?
ファイル形式に変更があった場合。
どうすれば削除できますか?
ファイルを開く
vim -b FILE_PATH
次のコマンドで保存します
:%s/^M//g
私の場合、
上記は機能しませんでした。CSVファイルをMacからLinuxマシンにコピーし、上記のすべてのコマンドを使用しましたが、以下の1つしか役に立ちませんでした
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,
VimはExモードで使用できます。
ex -bsc '%s/\r//|x' file
-b
バイナリモード
%
すべての行を選択
s
代替
\r
キャリッジリターン
x
保存して閉じる
特殊文字を入力する必要のないSedインプレースソリューション(これをコピーすると機能します):
sed -i -e "s/\r//g" filename
説明:
-i: in-place
-e: regular expression
\r: escaped carriage return
/g: replace globally
ここでのオプションはどれも私にとってはうまくいきませんでした。
最後にファイルをMS Wordで開き、^ Mが消えました。切り取り、選択した他のエディターに貼り付けます。
過去に、設定ファイルでさえ正しく解析されず空白について文句を言うのを見てきましたが、viを実行してリストを設定すると空白が表示されず、grep filename [[space]]で^ Mが表示されます
dos2unix file
が役立ちます
次の行を〜/ .vimrcに追加します
command! Tounix :call Preserve('1,$s/^M//')
次に、Windowsの行末を持つファイルがある場合、コマンド ":Tounix"を実行します。