|
iconvについて教えてください。 Solaris8で、iconvコマンドを使用しています。 今、使用している環境に、iconvコマンドが2つ入っています。 1./usr/local/bin/iconv 2./usr/bin/iconv 1と2は日付、サイズが異なり、1の方が、日付が新しく、サイズも大きいです。 環境変数のパスも両方設定されていて「usr/local/bin」のパスが 先あるので、whichコマンドで調べると、1の方を表示します。 シェルから、iconvを実施したいのですが、どちらの方を使えば よいのですか。 iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。 1./usr/local/bin/iconv の場合 コマンドがエラーとなった場合、statusに、”0”か”1”が返る。 # /usr/local/bin/iconv -f SJIS -t UTF8 sjis_file.txt > utf_file.txt iconv: conversion to UTF8 unsupported # echo $? 1 # 2./usr/bin/iconv の場合 コマンドがエラーとなった場合、statusが、”0”となる。 エラーも表示されない。 # /usr/bin/iconv -f SJIS -t UTF8 contact_SJIS.txt > uft_file.txt # echo $? 0 # シェルから、iconvを実施したいのですが、どちらの方を使えば よいのですか。 iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。 環境は Solaris8 sh(Bシェル) |
|
>4916 ありがとうございます。 expr index "${email}" @ や echo ${email} | awk '{ print substr($0,1,index($0,"@")-1)}' や ANS=`echo ${email} | awk '{printf "%s",index($0,"@")}'` 「@」が最初に現れた位置を取得して、cut で取り出し echo ${email} | cut -c1-`expr ${ANS} - 1` echo ${email} | cut -c`expr ${ANS} + 1` awkや、1回で取り出したかったので、expr でやったのですが、 expr index の形式使えないので、awkでやったのですが、 sed で置換する方法は気が付きませんでした。 ためして見ます。 |
|
>>4918 べた /usr/local/bin/iconv は GNU の libconv 同梱の iconv コマンド、 /usr/bin/iconv は Solaris 標準の iconv コマンドではないかと 思います。 GNU 版であれば、--version オプションを使うことで % iconv --version iconv (GNU libc) 2.3.4 Copyright (C) 2005 Free Software Foundation, Inc. (略) といった表示が得られるかと思います。 以下は Solaris 版と GNU 版の違いであったとして、という前提ですが、 機能差で選ぶなら↓を比較 (昔の Solaris 版 iconv は、不正なバイト列が あった場合即終了だった気がするのですが、現在はスキップという選択肢も 選べるんですかね? であればそれほど機能差はないかも) http://docs.sun.com/app/docs/doc/819-1210/6n3j74jpk?a=view http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html エンコーディングの多さで選ぶなら、/usr/local/bin/iconv -l と /usr/lib/iconv/iconv_data を比較。特に CP932 や UTF-8 などが絡む 場合は、手持ちの全ファイルを変換して結果を調べるくらいはやった 方がよいかと思います。 後は GNU が好きか、Solaris の世界で固めるのが好きか、でしょうか。 |