unixで記述したファイル(恐らくはEUCコードと思われます)はDOS環境や、場合によってはunix上のviやlessなどでも、
^M
が行末に表示されてしまいうっとうしいことがあります。

1)この制御コードは一体何なのですか?

2)どのような場合、この制御コードが挿入されますか?あるいは、どのような場合、このコードが表示されるのですか?

3)"^M"が表示されてしまっている場合、どのようにすれば表示がされなくなるのでしょうか?
(その場しのぎ的ではあるが、nkf -s などとしてSJISに変換させれば、dos系のvi や lessではまともに表示されます。他の方法を教えてください...例えば、vi や lessを文字コードを指定して起動するなど...)


#そのほか、文字コード関連でツボが有りましたら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

> 1)この制御コードは一体何なのですか?



文字コードの話とは直接関係ありません。OSによって、「改行」を表すコードが違うことがこの現象を引き起こします。

いわゆるDOS系では、改行は 0x0d+0x0a の2バイトで表されます。
unix系では、改行は 0x0a の1バイトで表されます。


> 2)どのような場合、この制御コードが挿入されますか?あるいは、どのような場合、このコードが表示されるのですか?

この制御コードは挿入されるのではなくて、元々「ある」ものです。

unixの流儀で書かれたプログラムが DOS 起源のテキストファイル(*)をそのまま読もうとすると 0x0d が余ります。
それが ^M です。

  (*) 例えば、DOS から ftp のバイナリモードでテキストファイルを持ち上げたりするとこういうことになる


> 3)"^M"が表示されてしまっている場合、どのようにすれば表示がされなくなるのでしょうか?

確かにうっとおしいので、有名どころでは対処されています。

今、確認してみたのですが、私が使っている less version 332+iso224 や vim の JVim 3.0-j2.0a なんかでは
先のケースで挙げたようなファイルでも ^M は表示されません。

因みに OS に付属してくる vi では ^M が表示されます。

# というか、^M が表示される方が普通なんですけどね
    • good
    • 0

> #そのほか、文字コード関連でツボが有りましたら教えてください。



ご質問とは関連無いかもしれませんが...。

WindowsマシンからUXIXマシンにFTPソフトでファイルコピー
を行い、さらにそのコピーのとき、「アスキーモード」を指定
しますと、改行コードが変換され、^Mをとってくれます。

なお、FTPソフトはSJISからEUCへの変換もしてくれます。(指定が必要です。)

※FTPソフトは、あるマシンから別のマシンにファイルを
コピーするときに使います。(Windowsのエキスプローラ
で行うファイルコピーと同じようなことをFTPという仕組み
で行います。)

私の経験で^Mが付くときは
・FTPソフトでアスキーモードの指定をしていない
・FTPソフトでアスキー/バイナリ自動判別モードにして
いるが、サフィックスがFTPソフトに登録されていないため、
バイナリでコピーされてします。(例えば .c というサフ
ィックスが登録されていないなど。)
です。
いろいろ原因はありえると思いますが。

参考URL:http://www.vector.co.jp/soft/win95/net/se061839. …
    • good
    • 0

横レスです。


y2000さんのやり方で、
:%s/^M//
では^Mを入力した時点でコマンドが解釈されてしまうので
:%s/^V^M//
と入力しましょう。
(言うまでもないと思いますが、^V, ^M はそれぞれ
 Ctrl+V, Ctrl+M です。)
    • good
    • 0

y2000です。


すみません。
記述に誤りがありました。
3)
他の方法としては
viで
:%s/^M//
と入力すると削除できるようです。
です。
    • good
    • 0

1)、2)


windowsなどで書かれた英数字のみのテキスト文章をLinuxで読むと改行ごとに^Mが残ってしまうようです。

3)
他の方法としては
viで
:%2/^M//
と入力すると削除できるようです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qdos2unix(コード変換)をしなくてもも済むLinuxの設定

RedHat Linux9でWebサーバーをつくり、Perlを使ったCGIプログラムもアップしています。しかし、CGIプログラムはWindowsで作成し、Linuxにアップしているので、そのままだとコードが違い表示されないので、
dos2unix < DOS_FILE >UNIX_FILE
とLinux側でやってコードを変換しています。
これをいちいちやらないようにするためにはどうすれば良いのでしょうか。
何かをLinuxにインストールするなどしたら大丈夫になりますか?

Aベストアンサー

最近この質問が多い理由にやっと気がつきました。

問題は vsftpd の初期設定(ASCIIモードでの転送が許可されない)にあるようです

/etc/vsftpd.conf を編集して、以下の行のコメントを外すと良いかもしれません

#ascii_upload_enabled=YES
#ascii_download_enabled=YES

QUNIX, MS-DOS, WINDOWSの関係は?

 GUIになれてしまっていますが、MS-DOSの世界に入っていくことが必要になるときもありますよね。先日も新しいPCを職場のLANにつなぐとき、作業担当者はMS-DOSの世界に入って作業をしていました・・・WINDOWSというOSとMS-DOSの関係って、どう考えたらいいんでしょうか。
 それから、UNIXとの関係も知りたいのですが。

 丁寧に説明していただいたら長くなってしまわざるを得ないのでしょうが、ごく簡単に教えていただければ幸いです。

Aベストアンサー

こんにちは、honiyonです。

 UNIXも、MS-DOSも、MS-WINDOWSも見た目が違うだけで出来る事は一緒です。
 OSの基本的な要素は、メモリ管理や、プログラムの起動、終了管理になりますが、どれでもこれは出来ます。
 ワープロや、表計算ソフト等、各種ソフトウエアは、OSに依存し、全てのOSで動くという事はありません。UNIX用、MS-WINDOWS用、MS-DOS用など、各OS専用のソフトが存在します。

 但し、MS-DOSとMS-WINDOWSについては密接な関係があり、この2つのOSはいつも一緒になっています。厳密に言えば、MS-WINDOWS NT系ではMS-DOSは存在しないのですが、MS-DOSのエミュレーターのような物が同梱されており、MS-DOSの一部プログラムが動作出来る仕組みになっています。
 MS-DOSで、MS-WINDOWS用のソフトが起動できたり、またその逆も可能です。MS-DOS用のソフトを起動する様命令すれば、勝手にMS-DOSが開いたりします。
 GUIでOSに命令するか、CUIでOSに命令するか選択できる、というようなイメージでしょうか?(ちょっと違う?

 さて、UNIX, MS-DOSは、CUI、MS-WINDOWSはGUIになります。GUIは、視覚的に操作が可能な反面、複雑な命令を与えるのは面倒です。CUIは全てコマンドで命令しますが、このコマンドをいくつか組み合わせて複雑な命令を与える、なんていう事も出来ます。 また、CUIはキーボードで操作するので、的確に命令を与える事が出来ます。 CUIに慣れると、マウスをコロコロ転がして命令するのが煩わしく思えてしまう事があります。因みにシステムに関わる一部のプログラムは、CUIで作成されているという事があります。特に文字出力の多いものは、ウインドウ表示にする理由がなく、CUIで出力した方が便利だし、シンプルだからです。 そのような理由もあって、LANの作業担当者はMS-DOSで作業をしたのでしょう。

 因みに最近UNIXもGUI化されている・・・ように見えますが、あれは X-WINDOW SYSTEMという、UNIX向けのGUIソフトです。UNIXの基本はCUIであり、これは今も変わりません。最近のLinux等のディストリビュージョンがX-WINDOW SYSTEMを標準でインストールし、起動するので、GUI化されたように見えます。
 GUI, CUIはそれぞれ一長一短であり、双方は共存していくと思います。

 なんだか支離滅裂な内容になっちゃった気がしますが・・・せっかく書いたので送信します笑

 こんなのでよければ、参考になれば幸いです(..

こんにちは、honiyonです。

 UNIXも、MS-DOSも、MS-WINDOWSも見た目が違うだけで出来る事は一緒です。
 OSの基本的な要素は、メモリ管理や、プログラムの起動、終了管理になりますが、どれでもこれは出来ます。
 ワープロや、表計算ソフト等、各種ソフトウエアは、OSに依存し、全てのOSで動くという事はありません。UNIX用、MS-WINDOWS用、MS-DOS用など、各OS専用のソフトが存在します。

 但し、MS-DOSとMS-WINDOWSについては密接な関係があり、この2つのOSはいつも一緒になっています。厳...続きを読む

QUNIX環境で、DOSでいう"treeコマンド"を実現するためには?

DOSでは、tree /Fでディレクトリ・ファイルの列挙ができますが、
UNIX環境でカレントディレクトリ配下の列挙できるものはないでしょうか?

それが、標準コマンドでもフリーライブラリでもかまわないのですが・・。

ご存知な方いらっしゃいましたら教えてください。

Aベストアンサー

ズバリそのままのモノがあります。

参考URL:http://mama.indstate.edu/users/ice/tree/

QMS-DOSで外部プログラムの制御方法

PC98のプログラムを使用する必要に迫られています。
もう、忘れてしまったのですが、次のようなことが可能でしたでしょうか?

(1)MS-DOSから、ある時刻になったら特定のアプリケーションを起動する。
(2)起動と同時に、アプリケーション内の実行コマンド(F1キー)を実行する。

バッチで出来ますでしょうか?機動までは出来ると思いますが、アプリケーション内の制御をDOSから出来たかどうか覚えていません。
もし分かりましたら、具体的なコマンドの記述まで教えて頂けると助かります。
よろしくお願いします。

Aベストアンサー

どの環境で使うのかを不明なので(どのWindowsのDOS窓なのか、DOS単体ならバージョンはいくつか)

DOS単体だと
(1)は常駐プログラム(TSR)を使うしかないでしょう、DOS標準にはこの機能はありません。また、他のプログラムが動いている時にはTSRを使ってもうまくいかないと思います。
(2)もアプリケーション自体に仕組んでいないと無理でしょう、通常コマンドラインから与えられるパラメータしか使えません。

DOSはシングルタスクです。DOSSHELLなどで疑似マルチタスクかはできますが、実際はタスクスイッチャに過ぎず、プロセス間のやりとりはサポートしていません(ファイルを使って似たことはできる)
WindowsのDOSであれば、何とかなりそうですが、(1)はNT系ならATコマンドで実現可能、(2)はアプリケーションが機能を持っていなければいずれにせよ無理

QMS-DOSのconfig.sys内のEMM386.EXEのパラメーターについて教えて下さい

古いMS-DOSの英語のプログラムを動かす必要が出てきました。
EMSに対応しているかも覚えていないので、できるだけメモリーを多くしたいと考え、大昔に自分のPCで使っていたconfig設定を書きためておいたノートを取り出して、その時のメモを見てみました。
その中に
DEVICE=C:\DOS\EMM386.EXE /UMB /HIGHSCAN
という記述を見つけたのですが、このパラメーターを全く覚えていないのです。
どなたかこのパラメーターの意味をお教えいただけませんでしょうか。
DEVICE=C:\DOS\EMM386.EXE RAM NOEMS
ならわかるのですが。
もしかすると、98専用のコマンドですか?
よろしくお願いいたします。

出かけることが多いので、もしかすると返事は遅くなってしまうかもしれません。

Aベストアンサー

WindowsフォルダでMSDOSDRV.TXTを探してみてください。
その中にemm386.exeのパラメーターが書いてあります。


このカテゴリの人気Q&Aランキング

おすすめ情報