Windows で作成したファイルを開くと、すべての行が^M
. これらの文字を一度に削除するにはどうすればよいですか?
27 に答える
dos2unixは、これを実行するコマンドライン ユーティリティです。または、^M を入力するために--:%s/^M//g
を使用するか、Vim が実行します。Ctrlv Ctrlm:set ff=unix
ファイル形式の設定に関するドキュメントがあり、Vim wiki には行末変換に関する包括的なページがあります。
あるいは、ファイルを頻繁に移動する場合は、ファイルを変換するのではなく変換したい場合がある:set ff=dos
ため、Vim はそれが DOS ファイルであることを認識し、行末に DOS 規則を使用します。
ビューの行末を変更します。
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
これは保存操作としても使用できます (:w だけでは、画面に表示される行末を使用して保存されません):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
また、コマンドラインから使用できます。
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
私は通常使用します
:%s/\r/\r/g
これは少し奇妙に思えますが、Vim が改行を照合する方法によって機能します。また、覚えやすいと思います:)
次のコマンドを使用することを好みます。
:set fileformat=unix
mac
またはを使用dos
して、ファイルを Mac または MS-DOS/Windows ファイル規則にそれぞれ変換することもできます。また、ファイルが既に正しい形式である場合は何もしません。
詳細については、Vim のヘルプを参照してください。
:help fileformat
:set fileformat=unix
DOS から Unix に変換します。
:%s/\r\+//g
Vim では、すべての改行が取り除かれ、改行だけが残ります。
From:ファイル形式
[エスケープ] :%s/\r$//
dos2unix
ファイルの内容を直接変更できます。
一時ファイルのリダイレクトを必要とせずに、ファイルで直接使用できます。
dos2unix input.txt input.txt
上記は、想定される US キーボードを使用しています。-437
UK キーボードを使用するオプションを使用します。
dos2unix -437 input.txt input.txt
次の手順で、DOS のファイル形式を Unix に変換できます。
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using Unix (LF-only) line endings.
参考:ファイル形式
tr -d '\15\32' < winfile.txt > unixfile.txt
次のコマンドを使用します。
:%s/^M$//g
を^M
表示するには、 を入力してから を入力CtrlVしCtrlMます。 CtrlV入力された次の文字をそのまま受け取るよう Vim に指示します。
^M を表示させることについてのコメントは、私にとってはうまくいきました。vi で「^M」と入力しただけでは、何も得られませんでした (見つかりませんでした)。CTRL++シーケンスはそれを完全に行いましたV CTRL。M
私の作業置換コマンドは
:%s/Ctrl-V Ctrl-M/\r/g
私の画面では次のように見えました:
:%s/^M/\r/g
:g/Ctrl-v Ctrl-m/s///
CtrlM\r
は、 DOS の行末が追加する文字、またはキャリッジ リターンです。コマンドラインにCtrlVリテラル文字を挿入するよう Vim に指示します。CtrlM
全体として、このコマンドはすべて\r
を何も置き換えず、行末からそれらを削除します。
次のコマンドを使用できます。
:%s/^V^M//g
「^」はCTRLキーの使用を意味します。
以下のコマンドは、現在のディレクトリ内のすべての .sh ファイルを再フォーマットするために使用されます。Fedora OSでテストしました。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
通常dos2unix
、これに使用できるコマンドがあります。GNU と BSD のバージョンでは引数の処理方法が異なるため、必ずマニュアルを読んでください。
BSD バージョン:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU バージョン:
dos2unix $FILENAME
または、ここで提案された回答のいずれかを使用して独自の回答を作成することもできます。dos2unix
たとえば、次のようになります。
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
ウィキアから:
%s/\r\+$//g
これにより、行末までのすべての改行記号 (1 つ以上の担当者) が検索されて削除されるため\n
、EOL のままになります。