ひとりごと

新しい記事:[1727]  古い記事:[1725] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2006/08/21 (月)

・ tcsh の呪い

うちのひとりごとこーなーはぜんぶくっつけて一つのHTMLにしたファイルを用意しています。w3mで見るぶんにはこれで良いのですが、何かの理由で Firefox とかで表示させたい場合は画像ファイルがちょっと邪魔です。

そんなわけで下記のようなコマンドを入力してみました。

% sed -e 's/\(<img src=[^>]*>\)/<!-- \1 -->/g' <all.html > all-text.html

が、これを実行するとなんか変なのですねー。出力されたものをFirefoxで表示させると、何も表示されないはずのところに'-->'とか表示されたりします。私の正規表現の書き方が間違ってるのだろうと思っていろいろ見直していたのですが、あることに気がつきました。

<!-- が <!- になっている
のです。コメントを挿入するつもりが開始タグがおかしいのですが、そりゃへんなのが表示されても不思議ではありませんね。ということで、ハイフンを挿入して実行しました。すると
またもや<!-- が <!- になっている
のです(^^)。

おっかしーなー、ということでコマンドラインで簡単な文を入力してみました。で、直後に'^p'を押して[enter]を何回か繰り返してみました。

takatani(toriyu): {101} echo '!----'
!---
takatani(toriyu): {102} echo '!---'
!--
takatani(toriyu): {103} echo '!--'
!-
takatani(toriyu): {104} echo '!-'
!
takatani(toriyu): {105} echo '!'
!
takatani(toriyu): {106} echo '!'
!

な、なんですか?これは(笑)。

アホな私はぜんぜん知らなかったのですが、man csh によると、文字'!'で始まる「ヒストリ置換」なるものがあるそうです。'!--'が置換にマッチするわけではないのですが、構文解析の都合上一つ消える仕様なのでしょう。ひょっとして tcsh でこういう風になるのはジョーシキなんでしょうか? ぜんぜん知りませんでしたよ(T_T)。

ちなみに、'\'を置けば打ち消すことができるらしいので、

echo '\!--'
であれば問題ないようです。

てゆーか、最初のコマンドは

% sed -e 's/<img src="\([^"]*\)"[^>]*>/[\1]/g' <all.html > all-text.html
の方が良いかも。これならハマることもなかったような(苦笑)。
[つっこみ]
08/21( かがみ )
シングルクオートで囲んでも副作用があるのが極悪かと。何か理由があるんですかねえ。
08/21( Y.Kumagai )
何ですか、これは??? 全く理屈が見えません。
最短マッチングが使えない時点で私はPerlへ逃げると思いますが(汗)
[つっこみ]

新しい記事:[1727]  古い記事:[1725] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)