うちのひとりごとこーなーはぜんぶくっつけて一つの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へ逃げると思いますが(汗) |