こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

どのようにすれば、解決できるか教えていただけないでしょうか?
お願いします。

投稿日時 - 2002-07-15 13:48:05

QNo.314490

すぐに回答ほしいです

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

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

投稿日時 - 2002-07-15 16:44:31

お礼

ありがとうございます。できました。

只、私の場合はCtrl+v Ctrl+m ではなくて
Ctrl+q Ctrl+m でした。

投稿日時 - 2002-07-15 16:55:07

ANo.8

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

Ctrl+V Ctrl+Mは、
以下のように打ってください。

Ctrlキーを押し、押した状態でvを押し、両方はなす。
つぎに、
Ctrlキーを押し、押した状態でmを押し、両方はなす。

画面上の表示は「^M」になるはずです。

投稿日時 - 2002-07-15 16:39:52

ANo.6

自信がなかったので、さっき書きかけて消してしまったのですが、
sed 's/^M$//'
でCRの削除、
sed 's/$/^M/'
でCRの追加ができないでしょうか?

^M は CR,つまり Ctrl + M ですが、そのままでは打てないと思うので、
Ctrl+V Ctrl+M として入力してみてください。

投稿日時 - 2002-07-15 16:04:29

補足

ありがとうございます。

もしかしたら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を表示させる(?)ということでしょうか?

投稿日時 - 2002-07-15 16:20:21

ANo.5

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

投稿日時 - 2002-07-15 15:04:18

補足

ありがとうございます。
trの使い方が間違っていておはずかしいかぎりです。

nkf のバージョンですが、1.9ではないようです。
nkfのバージョン1.9をインストールしたいと思うのですが
なかなか見つかりません。
これは、フリーソフトでインストールできるのでしょうか?

また、trでは unix → ms-dos への変換はできなさそうですね。
他に何か変換コマンドみたいなのはありますか?

投稿日時 - 2002-07-15 15:41:13

ANo.4

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

投稿日時 - 2002-07-15 15:00:32

ANo.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
という変換を行なっています。

投稿日時 - 2002-07-15 14:57:54

ANo.2

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

投稿日時 - 2002-07-15 14:41:38

ANo.1

nkfのバージョンはいくつですか?
手元のVer.1.9には、

----
d,c Delete \r in line feed, Add \r in line feed
----

というオプションがあるので、これで出来ると思いますよ。

投稿日時 - 2002-07-15 14:04:23

補足

ありがとうございます。

只、手元のnkfのバージョンの見方がわかりません。
単純にnkfのVer1.9をインストールすれば良いのかもしれませんが
Ver1.9というのはどのようにすればインストールできるのでしょうか?
また無償で入手することはできますか?

それから、nkfについて良くわかっていないのですが
nkfは漢字コードのみのフィルタで改行コードは関係ない
と思っていたのですが、nkfでも改行コードを変換すること
ができるのですか?

投稿日時 - 2002-07-15 14:47:59

あなたにオススメの質問