Ctrl+MはCR(復帰)でCtrl+JはLF(改行)で、それぞれ ^M ^J と表記されるという事

主にUNIXとかLinuxとかでの事だけど、よく ^M とか ^H という表記を見ます。
なんとなく分かってはいたけど、MacOSUNIXということもあって、改めてちゃんと把握したいところです。

とりあえず改行コード

Ctrl+M*1はCRでCtrl+J*2はLF。
lessとかviでテキストを開いたとき、行末に ^M とか表示されている場合は、lessやviが解釈できない改行コードで保存されたテキストデータかもしれません。

:set fileformat=改行コードのタイプ

vi ならこんなコマンドで改行コードを変更できます。*3


でも less は、調べた限りでは改行コードを指定したり出来ないようで、ちゃんと開くには一工夫要ります。

tr -d '\r' < file_you_want_to_change_line_format.txt | less //CRを消す。CRLFをLFに変えたい場合。
tr -d '\n' < file_you_want_to_change_line_format.txt | less //LFを消す。CRLFをCRに変えたい場合。
tr '\n' '\r' < file_you_want_to_change_line_format.txt | less //LFをCRに変えたい場合。
tr '\r' '\r\n' < file_you_want_to_change_line_format.txt | less //CRをCRLFに変えたい場合。

trコマンドを使ってパイプで less などに渡す事で、元のファイルの改行コードを変えたりせずに、ちゃんと改行された文章を見る事が出来ます。

Mac の less はCRじゃなくてLF?

Macってのは改行コードがCRなものだと思っていましたが、Mac OS の less でCRを受け付けてない事がありました。
ファイルを開くと、行末に ^M が出ていたので、どう見てもCRです。

tr '\r' '\n' < file_you_want_to_change_line_format.txt | less

これでCRをLFに変えたら、ちゃんと読む事が出来たので、間違いなくlessコマンドはLFを受け付けてます。
MaxOS XでUNIXベースになったから LF が標準になったのか?
それとも、lessコマンドが改行コードの自動判別が出来るとして、たまたまそのファイルでは、判別出来ていなかったとか?
今度時間を見つけてちゃんと調べたい所です。

なんでCtrl+MやJやHなのか

昔からPCに触れていたり、UNIXの文化に親しい人なんかは、自然に理解してそうなイメージがあります。
自分は良く知らないので調べてみました。


Ctrlキーは Control。つまり制御キーの事を指します。
つまり、ASCIIの制御文字を入力するためのキーだったようです。
Ctrlを押す事で、ASCIIの10進数で -64 となります。

^A(\65) SOH(\1)
^B(\66) STX(\2)
^H(\72) BS*4(\8)
^J(\74) NL*5(\10)
^M(\77) CR(\13)

例えば、このような対応表になります。
この5文字だけというわけではなく、DELを除く全ての制御文字に対応しています。
詳しくはASCII - Wikipedia に一覧表があります。

^ はアクサンシルコンフレックス

^ の様な記号は、検索する事が出来ず、こういう事を調べる時には不便です。
読み以外も含んでますが、羅列しておきます。

*1:^M

*2:^J

*3:改行コードのタイプは、この3通り。dos, max, unix

*4:BackSpace

*5:NewLine, LF

*6:HTMLエンティティ表記