サーバー上にファイルをアップロードすると、各行の最後に「^M」がついている場合があります。
これを削除する方法をご紹介します。
viで削除する場合K
viで対象ファイルを起動し、ノーマルモードで以下のように入力すると無くなります!
以下を入力
1 |
:s/[Ctrl+v][リターン]//g |
表示上は以下のように見える
1 |
:s/^M//g |
“^M”は特殊キーといわれるものの一つで”リターンキー”を表します。
特殊キーをだすには以下の方法が必要になります。
1 |
Ctrl-v + 特殊キー |
で、^Mはリターンキーなので、Ctrl-vを押した後にリターンキーを押すと出てくるのです。
perlで削除する場合
コマンドラインから以下を実行
1 |
$ perl -p -e 's/r$//;' -i.bak filename |
“-e”は次に続く文字列をpearlスクリプトとして実行
“-i”は入力ファイルの修正。”.bak”を付けるとバックアップファイルを生成する
“filename”は対象のファイル名
普通に^Mと入力しても置換できるっぽいね。
^Mが出る理由も以下に書いてあります。
———————
Linuxの改行コードはLFだけなので、ファイルの転送方法によってはWindowsで作成したテキストファイルをviで開くと、すべての行末に「^M」が表示される場合がある。
1つずつ検索して削除することも可能だが、数が多いと面倒だ。エディタで一括置換するのが簡単でいい。viで一括置換するには、[:]キーを押してコマンドモードに入り、一括置換のコマンド
%s/検索文字列/置換文字列/g
を実行する。
ここでは、^Mを削除(^Mを何もない状態に一括置換)するので、以下のように入力する。
:%s/^M//g
^Mを入力するには、[Ctrl]+[V]キーを押してから、[Ctrl]+[M]キーを押す。^Mは制御コードなので、[^]キーと[M]キーで「^M」と入力しても^Mとは認識されないので注意が必要だ。ちなみに、この方法はviではテキストの挿入モードで制御コードを入力するときにも使用できる。
ここではviを使って一括置換する方法を紹介したが、trコマンドを使っても一括置換が可能だ。trコマンドの使い方は文字を置換するにはを参照。