785

Windows で作成したファイルを開くと、すべての行が^M. これらの文字を一度に削除するにはどうすればよいですか?

4

27 に答える 27

1160

dos2unixは、これを実行するコマンドライン ユーティリティです。または、^M を入力するために--:%s/^M//gを使用するか、Vim が実行します。Ctrlv Ctrlm:set ff=unix

ファイル形式の設定に関するドキュメントがあり、Vim wiki には行末変換に関する包括的なページがあります。

あるいは、ファイルを頻繁に移動する場合は、ファイルを変換するのではなく変換したい場合がある:set ff=dosため、Vim はそれが DOS ファイルであることを認識し、行末に DOS 規則を使用します。

于 2008-09-17T12:45:38.567 に答える
312

ビューの行末を変更します。

: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
于 2008-09-18T18:53:17.423 に答える
172

私は通常使用します

:%s/\r/\r/g

これは少し奇妙に思えますが、Vim が改行を照合する方法によって機能します。また、覚えやすいと思います:)

于 2009-07-30T01:17:35.443 に答える
112

次のコマンドを使用することを好みます。

:set fileformat=unix

macまたはを使用dosして、ファイルを Mac または MS-DOS/Windows ファイル規則にそれぞれ変換することもできます。また、ファイルが既に正しい形式である場合は何もしません。

詳細については、Vim のヘルプを参照してください。

:help fileformat
于 2008-09-17T12:51:31.983 に答える
21

:set fileformat=unixDOS から Unix に変換します。

于 2008-09-17T12:52:08.910 に答える
20
:%s/\r\+//g

Vim では、すべての改行が取り除かれ、改行だけが残ります。

于 2008-09-17T12:45:24.680 に答える
14

From:ファイル形式

[エスケープ] :%s/\r$//

于 2008-09-17T12:49:28.510 に答える
9

dos2unixファイルの内容を直接変更できます。

一時ファイルのリダイレクトを必要とせずに、ファイルで直接使用できます。

dos2unix input.txt input.txt

上記は、想定される US キーボードを使用しています。-437UK キーボードを使用するオプションを使用します。

dos2unix -437 input.txt input.txt
于 2009-12-15T12:36:50.673 に答える
7

次の手順で、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.

参考:ファイル形式

于 2012-02-17T22:59:25.940 に答える
7
tr -d '\15\32' < winfile.txt > unixfile.txt

(参照: Unix と Windows のテキスト ファイル間の変換)

于 2012-05-24T04:03:26.547 に答える
5

次のコマンドを使用します。

:%s/^M$//g

^M表示するには、 を入力してから を入力CtrlVCtrlMます。 CtrlV入力された次の文字をそのまま受け取るよう Vim に指示します。

于 2008-09-17T12:46:51.167 に答える
5

^M を表示させることについてのコメントは、私にとってはうまくいきました。vi で「^M」と入力しただけでは、何も得られませんでした (見つかりませんでした)。CTRL++シーケンスはそれを完全に行いましたV CTRLM

私の作業置換コマンドは

:%s/Ctrl-V Ctrl-M/\r/g

私の画面では次のように見えました:

:%s/^M/\r/g
于 2012-07-13T17:46:37.563 に答える
4
:g/Ctrl-v Ctrl-m/s///

CtrlM\rは、 DOS の行末が追加する文字、またはキャリッジ リターンです。コマンドラインにCtrlVリテラル文字を挿入するよう Vim に指示します。CtrlM

全体として、このコマンドはすべて\rを何も置き換えず、行末からそれらを削除します。

于 2008-09-17T12:45:34.510 に答える
3

以下を使用できます。

vim somefile.txt +"%s/\r/\r/g" +wq

またはdos2unixユーティリティ。

于 2016-12-15T13:13:11.480 に答える
2

次のコマンドを使用できます。
:%s/^V^M//g
「^」はCTRLキーの使用を意味します。

于 2008-09-17T12:46:12.027 に答える
1

以下のコマンドは、現在のディレクトリ内のすべての .sh ファイルを再フォーマットするために使用されます。Fedora OSでテストしました。

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
于 2015-02-13T09:22:23.443 に答える
0

通常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}";
}
于 2009-07-30T09:46:04.687 に答える
0

ウィキアから:

%s/\r\+$//g

これにより、行末までのすべての改行記号 (1 つ以上の担当者) が検索されて削除されるため\n、EOL のままになります。

于 2016-02-08T18:09:16.033 に答える