改行コードがおかしいファイルを修正

Linuxにおいて、ファイルを開いたときに下図のように表示されるアスキーファイルがある。改行部分に制御文字(^M)が見られるが、改行がすべて無視されて、一行の文字列になってしまっている。

たぶんWindowsで編集されたファイルを、Linuxに持ってきたときこうなったのだが、普通は、改行はちゃんとされているが行末に^Mが付いている、というパターンはよくある。今回のように、改行がすべて無くなってしまう、というのは初めてのパターンだな。どんな条件でこんな風になってしまうのか、他人が作ったファイルなのでよく分からない。
このようなファイルの修正方法は、以下の通り。
viで件のアスキーファイルを開いて、文字の置換を実行する。コマンドモードで、すべての^Mを^Aに置き換える。

:%s/(Ctrl+V)(Ctrl+M)/(Ctrl+V)(Ctrl+A)/g

置き換える文字は、^Aでなくてもいい。この後で、その文字を^Mに再度置き換えるので、一意に指定できる文字であれば。すると、結果は下の通り。

再度、置き換えを行う。今度は、^Aを^Mに置き換える。

:%s/(Ctrl+V)(Ctrl+A)/(Ctrl+V)(Ctrl+M)/g

すると、下の通り、正常に表示される。