68user's page 掲示板

Prev< No. 4467〜4489> Next  [最新発言に戻る] [過去ログ一覧]
No. 4467 # 68user 2006/01/11 (水) 16:36:25
>>4466 68user
補足。Solaris の sh では
> while read -r line; do
> done < file.txt
でもダメなようですね。

http://blog.goo.ne.jp/cars-kitahefu/e/4190a337427d7a8cfcb5a62f515c6936

No. 4468 # 2006/01/11 (水) 21:32:54
>> 4467

ありがとうございます。

> while read -r line; do
> done < file.txt
はやはりダメでした。

while read line; do
done < file.txt
としたら上手く動きました。

また、
tmpline=`echo -n $line|sed 's/^ *//g'`
では、1行になるのですが、「-n」オプションが邪魔みたいで、上手く編集
できませんでした。

tmpline=`echo $line|sed 's/^ *//g'`
としたら上手くいきました。

No. 4469 # 2006/01/11 (水) 22:08:12
>> 4468

sed 一発で簡単にできるものなのでしょうか。

No. 4470 # zsh 2006/01/11 (水) 23:19:40
>>4469
完璧ではないですが、こんな感じで。
------
sed -e '/^[^ ]\{1,\}/ {
        N
}
s/^\([^ ]\{1,\}.*\)\n \{1,\}\([^ ]\{1,\}\)/\1\2/g' file.txt
------

>>4468
>while read line; do
>done < file.txt
>としたら上手く動きました。

これだけで動きますか?
whileの前に
exec 0<file.txt
とか要りませんでしたっけ?

>>4466 68user
>やはり sh でプログラムなんて書くもんじゃないと思う。誰か
> Sh Programming Considered Harmful
>を書いてください。

私は、どの程度の事までをシェルスクリプトでやるべきか悩みます。
Perlとか使った方が絶対に効率が良かったりするのに、
何故かシェルスクリプトにこだわる人とかいるし・・・
(で、気がつくと自分以外に判らないスクリプトが出来上がっていると。)

No. 4471 # mkt 2006/01/12 (木) 05:14:32
>>4463 68user
お返事いただきありがとうございます。

書きかけだった部分、もう削除しておられますが、いずれまとまった形で
復活するのを期待しています。

fgrep の話、面白いですね。man の記述の違いも。
でもこれ、何となく「fast = (使うのに)手っ取り早い」って訳すと
つじつまが合うような気がしてきました。quick というのも同様。
正規表現を無効にする(できる)点をアピールする感じで。
で、誤解が生じてしまったので表現を改めた、とか。
勝手な推測ですが。

> http://www.bsddiary.net/doc/hierarchy.txt
> 熟練者: 誰かが速いと言ったのでfgrepを使っている
> ハッカー: 自分で時間を測った結果egrepを使うことにした
の原文は
    http://groups.google.co.jp/group/net.jokes/msg/c49a0c0849fe8bb6
だと思うのですが、これより前に投稿されている
    http://groups.google.co.jp/group/net.jokes/msg/c24e7dccf82df3ff
と比べてやけに grep まわりが強調されてますね。

> オリジナル版に関わった方々がそうそうたる面子なので、調べずに突っ込みを
> いれるわけにもいかず、なかなか大変です。
でも今のまんまだと、矛盾が生じちゃってます(↓)。 ;p
    http://x68000.q-e-d.net/~68user/unix/pickup?keyword=fgrep&target=command&partial=on&regexp=on&case=off

> 全角入りソースをコピペしやすいよう、半角空白に置換しています。
あ、それは理解してたんですが、
[使い方]ページに「全角空白は 2 つ分の半角空白(…)に置換されます。」
とあるのに、どうして行頭に入れた全角空白 1 個が「&nbsp; 4 つ」
に置換されちゃったんだろう? と思った次第です。
# 今回は全部半角空白にしてみた。

No. 4472 # mkt 2006/01/12 (木) 05:20:48
なるほど、半角空白 1 個が「&nbsp; 2 つ」になってるのか…。
失礼しました。

No. 4473 # if 2006/01/12 (木) 11:14:17
>>4462

RFC2822 の folding を戻すのと大体同じですね。

sed -e ':loop' -e '$b' -e 'N;/\n /{s/\n *//;b loop' -e '};P;D;b loop'

でどうでしょうか?
見やすくすると
#!/usr/bin/sed -f
:loop
$b
N
/\n / {
                s/\n *//
                b loop
}
P
D
b loop

No. 4474 # 2006/01/12 (木) 23:49:57
>>4470 zsh
>>4473 if

ありがとうございます。
今、時間がありませんが、試してみます。

シェルスクリプトよりもPerlですか。

No. 4475 # 2006/01/12 (木) 23:54:24
>>4470 zsh

>これだけで動きますか?
>whileの前に
>exec 0<file.txt
>とか要りませんでしたっけ?

要りませんでした。
while read line; do
done < file.txt
または、
while read line
do
done < file.txt
で動きました。

No. 4476 # zsh 2006/01/13 (金) 15:03:09
>>4475
Solaris9のsh

No. 4477 # zsh 2006/01/13 (金) 15:07:31
>>4475
Solaris9のshで確認しましたが、
やはりwhileの前に
exec 0<file.txt
を入れないと、最終行が表示されません。
恐らく、元のファイルの最終行が空行なので問題ないのだと思います。

>>68user様
記述途中で送信してしまい、大変失礼しました。

No. 4478 # DNS勉強中 2006/01/14 (土) 14:05:00
>>4455 68user
ご指摘ありがとうございます。
スレッドセーフやマジックナンバなどは考えておりませんでした。
それと goto の部分は使いたくなかったのですが、うまくプログラムの流れを制御できなかったためやむなく使用しました。
確かに分かりにくいと思います。
今後修正してみようと思います。
かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。

No. 4479 # 68user 2006/01/16 (月) 12:43:51
>>4471 mkt
> 書きかけだった部分、もう削除しておられますが、いずれまとまった形で
> 復活するのを期待しています。
はい、そのうちまとめて更新したいと思います。

>>4477 zsh
> やはりwhileの前に
> exec 0<file.txt
> を入れないと、最終行が表示されません。
わたくしのまわりには Solaris がないので試せませんが、これは何が原因で
最終行が表示されないのでしょうか?

>>4478 DNS勉強中
> 今後修正してみようと思います。
> かなり忘れている部分が多いので、思い出すところからはじめないといけないのですが。
細かな指摘ですので修正は不要かと思います。もし DNS にこだわりがあるなら、
ライブラリ化したり、他のレゾルバのソースを読んだり、
      http://www5d.biglobe.ne.jp/~stssk/dns.html
を片っ端から実装するのがいいのではないでしょうか。

No. 4480 # zsh 2006/01/16 (月) 15:10:38
>>4479 68user
>わたくしのまわりには Solaris がないので試せませんが、これは何が原因で
>最終行が表示されないのでしょうか?

パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。
Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを
オープンしていました。
(ksh/bash/zshはサブシェルで動作しないので問題なし。)

No. 4481 # 2006/01/16 (月) 23:39:42
>>4480 zsh

>パイプを使用した場合と同様、サブシェルで動作する事が原因のようです。
>Solaris8のshで確認した所、forkしてからサブシェルの中でファイルを
>オープンしていました。
サブシェルで動作するとは、子プロセスでシェル起動しているというこ
ですか。

whileの前に
exec 0<file.txt
を入れないと、最終行が表示されないということですか。

No. 4482 # 68user 2006/01/17 (火) 10:45:07
>>4480 zsh
あー、なるほど。
>>4467 68user
> 補足。Solaris の sh では
>> while read -r line; do
>> done < file.txt
> でもダメなようですね
のことですね。別件かと勘違いしておりました。

No. 4483 # zsh 2006/01/17 (火) 10:51:51
>>4481
>サブシェルで動作するとは、子プロセスでシェル起動しているというこ
>ですか。

その通りです。

>whileの前に
>exec 0<file.txt
>を入れないと、最終行が表示されないということですか。

サブシェル(while)内で
use_buf=1
としても、親シェルには引き継がれないので
最後の if 文が必ず偽になります。
よって、最終行(最終行が半角スペースで始まる場合には最終 2 行)が
表示されないと思います。

No. 4485 # 2006/01/17 (火) 12:54:25
>>4483 zsh
試して見ました。

ファイルの最後が空行(最終行が改行コードで終了)の場合、
whileの前に
exec 0<file.txt
を入れないくても、最終行が表示されました。

最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、
catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る
ファイルをやると、最終行が表示されません。
whileの前に
exec 0<file.txt
を入れた場合でも。

No. 4486 # zsh 2006/01/20 (金) 11:01:34
>>4485
>ファイルの最後が空行(最終行が改行コードで終了)の場合、
>whileの前に
>exec 0<file.txt
>を入れないくても、最終行が表示されました。

試してみましたが、最終行(空行)は表示されませんでした。
Solaris 標準の sh ですよね?

>最終行の終わりが、改行コードではなく、ファイルの終端(EOF)がある場合、
>catコマンドでファイルを表示した時、最終行の後ろに、プロンプトが来る
>ファイルをやると、最終行が表示されません。

それは read コマンドが読込めないので、仕方がないというか
そこまでやるならシェルスクリプトにこだわらない方が良いかと。

No. 4487 # 68user 2006/01/23 (月) 01:49:38
GD::Graph で遊んでみました。
    http://x68000.q-e-d.net/~68user/webcgi/gd-graph.html
    http://x68000.q-e-d.net/~68user/webcgi/sample/perl/graph-maker.cgi

No. 4488 # take 2006/01/23 (月) 11:04:50
はじめまして。
おじゃまいたします。

早速ですが
Opensslライブラリを使用して復号処理を実装したいと考えておりまして
RSA鍵交換の場合は、おおまかに分かりましたが
DH鍵交換の実装方法がなかなか調べても分からない状況です。
おそらくRSAとは使用するI/Fが異なるのではないかと考えています。

ご存知の方いらっしゃいましたら
ご教授頂けないでしょうか。

RSA鍵交換の場合は下記のような感じです(秘密鍵は知っている前提)

(1) pre_master_secretを取得する
        RSA_private_decrypt()を呼び出す

(2) 上記のpre_master_secretとclient_randomとserver_random値より
      master_secretを生成

(3) データを復号する(master_secretが分かれば復号できる)
        EVP_Cipher()を呼び出す

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 4489 # take 2006/01/23 (月) 11:10:06
はじめまして。
おじゃまいたします。

早速ですが
Opensslライブラリを使用して復号処理を実装したいと考えておりまして
RSA鍵交換の場合は、おおまかに分かりましたが
DH鍵交換の実装方法がなかなか調べても分からない状況です。
おそらくRSAとは使用するI/Fが異なるのではないかと考えています。

ご存知の方いらっしゃいましたら
ご教授頂けないでしょうか。

RSA鍵交換の場合は下記のような感じです(秘密鍵は知っている前提)

(1) pre_master_secretを取得する
        RSA_private_decrypt()を呼び出す

(2) 上記のpre_master_secretとclient_randomとserver_random値より
      master_secretを生成

(3) データを復号する(master_secretが分かれば復号できる)
        EVP_Cipher()を呼び出す

Prev< No. 4467〜4489> Next  [最新発言に戻る] [過去ログ一覧]