多くのLinuxサーバの管理って、Windowsで通常業務して、ターミナルでLinuxにログインすることが多いかと思っています。
自分はたまに改行コード変え忘れて、cat -Aとかで確認してガッカリしてます。
- 目次 -
とりあえず。^M
とは?
^M
は、キャリッジリターン(Carriage Return)を表す制御文字です。
これはWindowsの改行コード CRLF
(\r\n
)に含まれる \r
(キャリッジリターン)の部分です。
LinuxやMacでは通常、改行コードは LF
(Line Feed \
n)のみが使われていますが、Windowsでは CRLF
(\r\n
)が使われるため、Linux環境でWindowsのテキストファイルを開くと ^M
が表示されることがあります。
^M
が表示される原因
Linuxでファイルを開いたときに ^M
が表示されるのは、Windowsで作成されたテキストファイル(CRLF
形式)をLinuxのエディタやコマンドで開いた場合です。
例:cat
コマンドで表示
$ cat -A sample.txt
-A(または-e)で改行コードなどの制御文字が表示されます。
^M
の削除方法
Windowsから持ってきたファイルの ^M
を削除する方法はいくつかあります。
方法1: dos2unix
コマンド
dos2unix
コマンドが使える環境であれば、dos2unixコマンドでWindowsの改行コードをLinux用の LF
に変換できます。
■コマンド例(Windows(CRLF)→Linux(LF))
$ dos2unix sample.txt
■(参考)コマンド例(Linux(LF)→Windows(CRLF))
$ unix2dos sample.txt
■(参考)コマンドの存在確認
$ which dos2unix
/usr/bin/dos2unix
# PATHに存在する場合、コマンドのパスが出力される。
(存在しない場合)$ which dos2unix
/usr/bin/which: no dos2unix in (${PATH})
# PATHに存在しない場合、「no <コマンド>」が出力される。
方法2: sed
コマンド
sed
で ^M
を削除する方法もあります。
$ sed -i 's/\r//g' sample.txt
■オプション等の意味
・-i : 指定したファイルを直接編集(インプレース編集)します。要するに上書きされます。
・s/\r//g
s : substitute(置換)の指定です。
/\r//
:\r
(CR、^M)を””に変換(削除)します。
g : global(全体)を対象とします。これがないと1つ目に一致したものだけ置換されます。
方法3: tr
コマンド
tr
を使ってもCR
を削除できます。
$ cat sample.txt | tr -d '\r' > sample_fixed.txt
^M
以外の制御文字
Linuxでは他にも ^
の表記を使った制御文字が表示されることがあります。
日本語名 | 英語名 | 略称 | ASCIIコード | 表記 |
---|---|---|---|---|
ヌル(NULL) | Null | NUL | 0x00 | ^@ |
ヘッダ開始 | Start of Heading | SOH | 0x01 | ^A |
テキスト開始 | Start of Text | STX | 0x02 | ^B |
テキスト終了 | End of Text | ETX | 0x03 | ^C |
伝送終了 | End of Transmission | EOT | 0x04 | ^D |
問い合わせ | Enquiry | ENQ | 0x05 | ^E |
肯定応答 | Acknowledge | ACK | 0x06 | ^F |
ベル(警告音) | Bell | BEL | 0x07 | ^G |
バックスペース | Backspace | BS | 0x08 | ^H |
水平タブ | Horizontal Tab | HT | 0x09 | ^I |
改行 | Line Feed | LF | 0x0A | ^J |
垂直タブ | Vertical Tab | VT | 0x0B | ^K |
改ページ(フォームフィード) | Form Feed | FF | 0x0C | ^L |
キャリッジリターン(復帰) | Carriage Return | CR | 0x0D | ^M |
シフトアウト | Shift Out | SO | 0x0E | ^N |
シフトイン | Shift In | SI | 0x0F | ^O |
データリンクエスケープ | Data Link Escape | DLE | 0x10 | ^P |
装置制御1 | Device Control 1 | DC1 | 0x11 | ^Q |
装置制御2 | Device Control 2 | DC2 | 0x12 | ^R |
装置制御3 | Device Control 3 | DC3 | 0x13 | ^S |
装置制御4 | Device Control 4 | DC4 | 0x14 | ^T |
否定応答 | Negative Acknowledge | NAK | 0x15 | ^U |
同期アイドル | Synchronous Idle | SYN | 0x16 | ^V |
伝送ブロック終了 | End of Transmission Block | ETB | 0x17 | ^W |
取消 | Cancel | CAN | 0x18 | ^X |
媒体終了 | End of Medium | EM | 0x19 | ^Y |
置換 | Substitute | SUB | 0x1A | ^Z |
エスケープ | Escape | ESC | 0x1B | ^[ |
ファイル区切り | File Separator | FS | 0x1C | ^\ |
グループ区切り | Group Separator | GS | 0x1D | ^] |
レコード区切り | Record Separator | RS | 0x1E | ^^ |
ユニット区切り | Unit Separator | US | 0x1F | ^_ |
削除 | Delete | DEL | 0x7F | ^? |

コメント