プロが教えるわが家の防犯対策術!

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

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

A 回答 (8件)

nkfのバージョンはいくつですか?


手元のVer.1.9には、

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

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

この回答への補足

ありがとうございます。

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

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

補足日時:2002/07/15 14:47
    • good
    • 0

ms-dosからunixへのファイルの転送はどのように行なっていますか?


FTPを使っているのなら、ASCIIモードで転送すれば、改行コードは自動的に変換されるはずです。
    • good
    • 0

ちなみに、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
という変換を行なっています。
    • good
    • 0

man nkf


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

nkf に -Lu オプションをつけると


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

この回答への補足

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

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

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

補足日時:2002/07/15 15:41
    • good
    • 0

自信がなかったので、さっき書きかけて消してしまったのですが、


sed 's/^M$//'
でCRの削除、
sed 's/$/^M/'
でCRの追加ができないでしょうか?

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

この回答への補足

ありがとうございます。

もしかしたら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
    • good
    • 0

Ctrl+V Ctrl+Mは、


以下のように打ってください。

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

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

ちなみに、


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

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

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

お礼日時:2002/07/15 16:55

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