web-dev-qa-db-ja.com

VimでDOSの行末をLinuxの行末に変換する

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

645
Bert Hekman

dos2unix はこれを実行するコマンドラインユーティリティです。使用する場合は:%s/^M//gです。 Ctrl - vCtrl - m ^ Mを入力するか、:set ff=unixを入力するとvimがそれを実行します。

'fileformat'設定に関するドキュメントはこちら です。そしてvim wikiは包括的な 行末変換ページを持っています .

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

995
pjz

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

: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
249
Ludvig A. Norin

私は通常使う

:%s/\r/\r/g

これは少し奇妙に思えますが、vimが改行にマッチする方法のためにうまくいきます。私も覚えておくのが簡単だと思います:)

153
t-dub

私は以下のコマンドを使うのが好きです。

:set fileformat=unix

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

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

:help fileformat
75
:%s/\r+//g

Vimでは、これはすべての改行を取り除き、改行だけを残します。

19
mercutio

dosからunixに変換する:set fileformat=unix

16
13
Alex Gartrell

dos2unixはファイルの内容を直接変更することができます。

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

dos2unix input.txt input.txt

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

dos2unix -437 input.txt input.txt

ファイルのディレクトリをdosからUnixに変換する

コマンドラインとsedを使用して、拡張子が「.ext」のカレントディレクトリ内のすべてのファイルを検索し、すべての「^ M」を削除します。

@ https://Gist.github.com/sparkida/777317

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

また、上記のように^ MCtrl+V + Ctrl+M (キャレット記号「^」とMを入力しないでください)

7
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(参照: http://kb.iu.edu/data/acux.html

6
MichaelD

次のコマンドで

:%s/^M$//g 

表示する^Mを取得する CtrlV それから CtrlM。 CtrlV 次の文字をそのまま入力するようにVimに指示します。

5
Dave Webb

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

参照: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

5
ajitomatix

あなたが使用することができます:

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

またはdos2unix utility

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

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

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

4
Rob Wells

^ Mを表示させることについてのコメントは、私にとってうまくいったことです。私のviに "^ M"とタイプするだけでは何も得られません(見つかりません)。の CTRL+VCTRL+M シーケンスは完全にそれをやった。

私の作業代行コマンドは

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

これは私の画面ではこんな感じでした。

:%s/^M/\r/g
4
Dannid

私は非常に簡単な方法を見つけた:nanoでファイルを開く:nano file.txt

押す CTRL+O 保存するが、押す前 Enter、 押す: ALT+D DOSとUnix/Linuxの行末を切り替えるには、または ALT+M MacとUnix/Linuxの行末を切り替えるには、を押します。 Enter 保存して CTRL+X やめるために。

4
Stefan Sjöberg

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

3
JayG

下記のコマンドはカレントディレクトリの全ての.shファイルを再フォーマットするために使われます、私は私のFedora OSでそれをテストしました。

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
2
user3220487

私はこれがどこかで見られることを知っていました。これがFreeBSDのログインのヒントです。

DOSファイルからそれらすべての^ M文字を削除する必要がありますか?やってみる

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

通常、これに使用できる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}";
}
1
dsm

Linuxコンソールを直接起動するには:vim file.txt +"set ff=unix" +wq

1
CBuzatu

Vimでは、次のように入力します。

:w !dos2unix %

これにより、現在のバッファの内容がdos2unixコマンドにパイプ処理され、結果が現在の内容に上書きされます。 Vimはその後ファイルをリロードするように要求します

1
Tallak Tveide

windowsでNotePadまたはNotePad ++でファイルを作成し、それをLinuxに持っていきvimで開くと、各行の終わりに^ Mが表示されます。これを削除するには

Linux端末で次のように入力します。

dos2unix filename.ext

これで必要な魔法ができます。

0
Santle Camilus

このトピックは非常に古くありますが、私はウィキアから別のものを入れたいと思います。

%s/\r\+$//g

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

0
loadaverage

これが私のやり方です。 dos EOLでファイルを開いたとき、ファイルを保存すると自動的にunix EOLに変換されます

autocmd BufWrite * :set ff=unix
0
Thomas PABST

^ Mの代わりに改行が必要でした。 Perlを助けに:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

または標準出力に書き込むには:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574