vim で DOS の行末を Linux の行末に変換する
質問
Windows で作成したファイルを開くと、行はすべて次で終わります。 ^M
.
これらの文字を一度に削除するにはどうすればよいですか?
解決
dos2unix これを行うコマンドライン ユーティリティ、または :%s/^M//g
使えばそうなります Ctrl-v Ctrl-メートル ^M を入力することもできます。 :set ff=unix
vim が代わりにやってくれます。
「fileformat」設定に関するドキュメントは次のとおりです。 ここ, 、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
ファイルを Macintosh または MS-DOS/MS-Windows のファイル規則にそれぞれ変換します。ファイルがすでに正しい形式である場合は何も行われません。
詳細については、vim ヘルプを参照してください。
:help fileformat
:%s/\r+//g
Vim では、これによりすべての復帰文字が削除され、改行のみが残ります。
:set fileformat=unix
dosからunixに変換します。
から: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc] :%s/ $//
dos2unix
ファイルの内容を直接変更できます。
一時ファイルのリダイレクトを必要とせず、ファイルに対して直接使用できます。
dos2unix input.txt input.txt
上記は想定のUSキーボードを使用しています。使用 -
UK キーボードを使用するための 437 オプション。
dos2unix -437 input.txt input.txt
ファイルのディレクトリを dos から Unix に変換する
コマンドラインと sed を使用して、現在のディレクトリ内で拡張子「.ext」を持つすべてのファイルを検索し、すべての「^M」を削除します。
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
また、上で述べたように ^M = Ctrl+V + Ctrl+M (キャレット「^」記号と M を入力するだけではありません)
tr -d '\15\32' < winfile.txt > unixfile.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.
参照: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
次のコマンドを使用します。
:%s/^M$//g
入手 ^M
現れるタイプ CtrlV それから CtrlM. CtrlV は、入力された次の文字をそのまま受け取るように Vim に指示します。
とても簡単な方法を見つけました。nano でファイルを開きます。 nano file.txt
プレス CTRL+○ 保存しますが、押す前に 入力, 、 プレス: オルタナティブ+D DOS と Unix/Linux の行末を切り替えるか、または: オルタナティブ+M Mac と Unix/Linux の行末を切り替えて、 を押します。 入力 保存して、 CTRL+バツ やめること。
:g/Ctrl-v Ctrl-m/s///
CtrlM キャラクターです \r
, 、またはキャリッジ リターン。DOS の行末に追加されます。 CtrlV vim にリテラルを挿入するように指示します CtrlM コマンドラインの文字。
全体として、このコマンドはすべてを置き換えます。 \r
何もせず、行末からそれらを削除します。
次のものが使用できます。
vim somefile.txt +"%s/\r/\r/g" +wq
または dos2unix utility
.
^M を表示させることに関するコメントが私にとってはうまくいきました。vi で「^M」と入力するだけでは何も表示されません (見つかりません)。の CTRL+V CTRL+M しかし、シーケンスはそれを完璧に実行しました。
私の実際の置換コマンドは次のとおりです
:%s/Ctrl-V Ctrl-M/\r/g
私の画面では次のように見えました。
:%s/^M/\r/g
次のコマンドを使用できます。
:%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}";
}
これをどこかで見たことがあると知っていました。FreeBSD ログインのヒントは次のとおりです。
DOS ファイルから ^M 文字をすべて削除する必要がありますか?試す
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
vim で次のように入力します。
:w !dos2unix %
これにより、現在のバッファの内容が dos2unix コマンドにパイプ処理され、結果が現在の内容に上書きされます。Vim はファイルのリロードを要求します。
Linux コンソールで直接実行するには:vim file.txt +"set ff=unix" +wq
このトピックは非常に古いものですが、wikia から別の内容を載せたいと思います。
%s/\r\+$//g
そのfillは、行末までのすべての復帰記号(1つ以上の繰り返し)を見つけて削除します。 \n
オルに滞在します。
これが私のやり方です。ファイルを dos EOL で開き、ファイルを保存すると自動的に unix EOL に変換されます
autocmd BufWrite * :set ff=unix
Windows の NotePad または NotePad ++ でファイルを作成し、それを Linux に移動して vim で開くと、各行の末尾に ^M が表示されます。これを削除するには、
Linux ターミナルで次のように入力します。
dos2unix ファイル名.ext
これで必要な魔法が実行されます。
^M の代わりに改行が必要でした。Perl が助けてくれます:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
または、標準出力に書き込むには:
perl -p -e 's/\x0d/\n/g' < excel_created.txt