2015年1月28日水曜日

html の タグをひたすら印刷する sed

sed おもしろいなあ、

とりあえずHTMLタグのスペースと属性を取り除いたものをホールドスペースにひたすら突っ込む
のを書いた。入力がなくなったらホールドスペースを印刷する仕組み

cat hoge.html |tr "
" " "|sed -f ckbt.sed

さすがに各行読みながら実行はめんどいので
みたいに最初に改行をスペースに変換する。

/^>/{
  b err
}
/^[^><]\+/{
  s/^[^><]\+/\n/
  D
}
/^$/{
  x
  #---(2)---
  q
}
/^<\/\?[^\/><[:space:]]\+\/\?>/{
  H
  x
  s/\n\(<\/\?[^\/><[:space:]]\+\/\?>\)[^\n]*$/\n\1/
  #---(1)---
  x
  s/^<\/\?[^\/><[:space:]]\+\/\?>/\n/
  D
}
  t clear_t
:clear_t
  #remove spaces in the tag
  #and I don't care attributes. remove them as well
  s/^\(<\/\?\)[[:space:]]*\([^\/><[:space:]]\+\)[[:space:]]*[^>]*\(\/\?>\)/\n\1\
2\3/
  t ok
  b err
:ok
  D
:err
  s/^/ERROR/
  p
  d
  q


このまま実行するとひたすら属性を抜いたTagをひたすら印刷する。

あとはHOLDスペースに突っ込んだ後で、スタックトップでオープンとクローズが対応しているタグを消していく s/ コマンドを書くこと #---(1)---部分

 #---(2)--- で検査結果を印刷するのを書けばでバランスが取れているかどうかは判別可能っぽい

sed はかなりパズルおもしろいけど、この辺でやめとく。

ところであたりまえではあるんだけど
sed のみで理論的には ある程度の計算はできると思うんです。
もちろん コマンドライン引数とかはなしですけど。

そういう事をひたすら追求するホームページとか作ってみたいな。

例えばさ 521 * 5 とか入力すると、
521個の'o'の連結 * 5個の o の連結に書き換える事は可能で
oooo......(略)....oooo*ooooo
みたいには書き換える事が可能でそれを
どうにかsコマンドを使って2605個のoに書き換える事って可能だと思う。
さらにそれを2605という数に置き換えて表示することってできると思うのね

0 件のコメント:

コメントを投稿