• ベストアンサー

改行コードの変換について

OS:Solaris2.6 改行コードをunixからms-dosへ、ms-dosからunixへ変換したいと思っています。 ながれとしては、ms-dosで作成したファイルをunixのほうで編集(プログラム) して、再びms-dosに戻すといったことがしたいと思っています。 そこで、 nkf -e aaa | tr '\r\n' '\n' > bbb nkf -e ccc | tr '\n' '\r\n' > ddd aaa:ms-dos ccc:編集後のファイル これでできると思ったのですが、dddの改行コードの表示がE'で Macintoshの改行コードになってしまします。 また、bbbのファイルですが改行が2回行われてしまいます。 例 aaa のファイルの内容 123 456 bbb のファイルの内容 123 456 どのようにすれば、解決できるか教えていただけないでしょうか? お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.8

ちなみに、 sed では通常 \n を行の区切りとして認識しているので、  s/\n/\r\n/ は、そもそも前半部分がマッチしません。つまり、一度もこの置換コマンドは実行されません。 上記のようなことに対応するのが、  s/$/\r/ になりますが、たぶん、\rは文字通り 文字\ と 文字r として認識されてしまうと思います。そこで、  s/$/^M/ とするわけです。

akashyati
質問者

お礼

ありがとうございます。できました。 只、私の場合はCtrl+v Ctrl+m ではなくて Ctrl+q Ctrl+m でした。

その他の回答 (7)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.7

Ctrl+V Ctrl+Mは、 以下のように打ってください。 Ctrlキーを押し、押した状態でvを押し、両方はなす。 つぎに、 Ctrlキーを押し、押した状態でmを押し、両方はなす。 画面上の表示は「^M」になるはずです。

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.6

自信がなかったので、さっき書きかけて消してしまったのですが、 sed 's/^M$//' でCRの削除、 sed 's/$/^M/' でCRの追加ができないでしょうか? ^M は CR,つまり Ctrl + M ですが、そのままでは打てないと思うので、 Ctrl+V Ctrl+M として入力してみてください。

akashyati
質問者

補足

ありがとうございます。 もしかしたらsedでできるかもと思いやってみたのですが うまくいきませんでした。(sed の使い方もあやしいですが) nkf -e ccc | sed 's/\\n/\\r\\n/g' > ddd 上記のsed 's/$/^M/' ですが、^Mの部分にCtrl+V Ctrl+Mと書くわけ ではないですよね? > ^M は CR,つまり Ctrl + M ですが、そのままでは打てないと思うので、 > Ctrl+V Ctrl+M として入力してみてください。 の方法が良くわからないです。 これは行末に^Mを表示させる(?)ということでしょうか?

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.5

nkf に -Lu オプションをつけると で出力の改行コードがUNIX型(LF)に、 nkf に -Lw オプションをつけると で出力の改行コードがWindows型(CRLF) になるようですよ。

akashyati
質問者

補足

ありがとうございます。 trの使い方が間違っていておはずかしいかぎりです。 nkf のバージョンですが、1.9ではないようです。 nkfのバージョン1.9をインストールしたいと思うのですが なかなか見つかりません。 これは、フリーソフトでインストールできるのでしょうか? また、trでは unix → ms-dos への変換はできなさそうですね。 他に何か変換コマンドみたいなのはありますか?

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.4

man nkf でヘルプが見られます。 また、 nkf -v でバージョン情報などが見られるようです。(バージョン 1.9の場合)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.3

ちなみに、trというコマンドの使い方が違いますね。 例えば、  tr 'abc' 'def' というコマンドでは、 「aがでてきたらdに変換する。」 「bがでてきたらeに変換する。」 「cがでてきたらfに変換する。」 ということを同時に行なうわけです。 2番目の文字列がはじめの文字列より短い場合は、2番目の文字列の最後の文字が繰り返されます。 例  tr 'abcdef' 'ghi' は、  tr 'abcdef' 'ghiiii' と同じ動作になる。 2番目の文字列がはじめの文字列より長い場合は、2番目の文字列のあまっている文字が無視されます。 例  tr 'abc' 'ghijkl' は、  tr 'abc' 'ghi' と同じ動作になる。 というわけで、  nkf -e aaa | tr '\r\n' '\n' > bbb は  nkf -e aaa | tr '\r\n' '\n\n' > bbb つまり、  nkf -e aaa | tr '\r' '\n' > bbb という変換のみを行なっており、 また、  nkf -e ccc | tr '\n' '\r\n' > ddd は  nkf -e ccc | tr '\n' '\r' > ddd という変換を行なっています。

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

ms-dosからunixへのファイルの転送はどのように行なっていますか? FTPを使っているのなら、ASCIIモードで転送すれば、改行コードは自動的に変換されるはずです。

回答No.1

nkfのバージョンはいくつですか? 手元のVer.1.9には、 ---- d,c Delete \r in line feed, Add \r in line feed ---- というオプションがあるので、これで出来ると思いますよ。

akashyati
質問者

補足

ありがとうございます。 只、手元のnkfのバージョンの見方がわかりません。 単純にnkfのVer1.9をインストールすれば良いのかもしれませんが Ver1.9というのはどのようにすればインストールできるのでしょうか? また無償で入手することはできますか? それから、nkfについて良くわかっていないのですが nkfは漢字コードのみのフィルタで改行コードは関係ない と思っていたのですが、nkfでも改行コードを変換すること ができるのですか?

関連するQ&A