dehtml2a.sed rev.9 Written by Seiji Fujita http://userweb.alles.or.jp/sfujita/ =============================================================================== 説明  ̄ ̄ HTMLで記述された文書から条件付きでHTMLタグを除去します。 また、空白/タブ/改行だけが2行以上続く場合、1つの空行にまとめます。 タグを除去した結果として空行になったものも同様に、なるべく1つの空行にまと めますが、残る場合があります。[*1] ※このスクリプトは、dehtml.sedの初期版 rev.2に、水平線タグ処理と、rev.72と  同等の特殊文字の置換処理+αを追加した版です。  dehtml2a.sedと、dehtml.sed/dehtml_0.sedの大きな違いは、論理行の連結処理  をするかしないかにあり、dehtml2a.sedは連結処理をしません。  ほとんどのタグ、宣言文を除去するだけの、基本機能+αに絞ってあります。 ・改行タグを改行に変換します。 ・水平線タグを、改行 & 空白2文字 & ハイフン"-"76文字 & 改行 へ変換します。 ・特殊文字("など)が正しく";"で終了していないものは、";"を補った後に  通常文字へ変換します。特殊文字の記述は大文字(例えば")にも対応。  |を|と記述するような0プレフィックスにも対応。 ・タイトル foo に変換します。 ・取消線foo に変換します。 ・上付き文字 ab" を "a^b " に変換します。 ・下付き文字 "ab" を "a_b " に変換します。 使用方法  ̄ ̄ ̄ ̄ sed -f dethml2a.sed 変換元ファイル > 変換先ファイル または sed -f dethml2a.sed < 変換元ファイル > 変換先ファイル または(パイプ処理) 他コマンド | sed -f dethml2a.sed > 変換先ファイル 備考  ̄ ̄  変換しようとするHTML文書が シフトJIS以外でエンコードされている場合は、 dehtml.sedでHTML除去作業前に、シフトJISに変換しておいてください。 例えばJISエンコードされたHTML文書にdehtml.sed処理をしてからシフトJISにする 順番では、JISエンコード文字の影響で本来の"<"や">"が発見できなくなり、正しく HTML除去ができなくなります。また、文字が崩れることがあります。  エスケープシーケンスとして"\t"(水平タブ)が使えないsed処理系(例えば、 GNU sed version 1.18 + multi-byte extension 1.03)では、"\t"をタブ文字 そのものに置き換えて下さい。  変換の際に、"line too long"などのエラーが出ることがありますが、その原因 としては、  (1) 入力したHTML文書の、物理的な1行(改行コードから改行コードまで)の    文字数が多すぎて、sedの扱う行の限界を超えてしまい、変換ができなく    なった場合  (2) 変換しようとするHTML文書の改行コードが、実行するシステム(OS)のもの    と異なっている場合 が考えられます。その際、場合によっては、暴走します。 (1)に対しては、物理的な改行を挿入するために、文中の

毎に改行を挿入 して物理的な1行を短くすることによって、回避できる場合があります。 もし


などが無い場合には、適宜改行を付加して下さい。


毎に改行を挿入する場合には、次のスクリプト predetag.sed で前処理を 施して下さい。


毎に改行を挿入しても、なお1行が長すぎる場合には、エラーが起こります から、適宜改行を追加して下さい。また、変換結果に不要な改行が増えることも あります。 ------- cut here ------ 8< ------ 8< ----- 8< ----- 8< ----- 8< ----- # predetag.sed s/\(<[pP] *[^>]*>\)/\ \1/g s/\(<[bB][rR] *[^>]*>\)/\ \1/g s/\(<[tT][dDrRhH] *[^>]*>\)/\ \1/g ------- cut here ------ 8< ------ 8< ----- 8< ----- 8< ----- 8< ----- (2)に対しては、ご利用のシステム(OC)の改行コードに変換するツールを利用して 改行コードを変換してから、改めてタグ除去作業をして下さい。改行コードが システムの形式と異なる場合、SEDは、改行部分を検出することができず、一続 きの文書だと見なしてしまい、(1)と同じ事が起こります。  参考)DOS/Windowsシステムでは、CR(0x0D)とLF(0x0A)の並びで改行を   表わし、MacではCR(0x0D)だけ、UNIXではLF(0x0A)だけで改行を表わします。 [*1] タグを除去した結果の空行が2行以上続いてしまう件を、1パスで処理するのが面倒 なので、現在の版では対応しません。それらを除去したい場合は、dehtml.sedによっ て出力された結果を以下のスクリプトで処理して下さい。 ------- cut here ------ 8< ------ 8< ----- 8< ----- 8< ----- 8< ----- s/^[ \t ]*$// /^$/{ $b N /^\n[ \t ]*$/D } ------- cut here ------ 8< ------ 8< ----- 8< ----- 8< ----- 8< ----- その他(履歴など)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ rev.0  ・初期版のリメイクとして再公開。 rev.1  ・タグを取るだけだと意味が違ってしまったり、分かり難くなるタグを単なる   除去から置換へ変更した。置換要領は以下の通り。   ・タイトル "foo" → ""   ・取消線 "foo" → ""   ・上付き文字 "ab" → "a^b "   ・下付き文字 "ab" → "a_b " rev.2  ・閉じ忘れタグの存在により、無限ループに陥って終了できなかったり、バッファ   あふれによりハングアップしたりすることの改善をした。    のように、閉じ忘れたタグの直前までの文字列を<●不完全タグ: foo bar>   として出力する。   タグの閉じ忘れ以外で直接記述された"<", ">"はそのまま出力される。 rev.3  ・—を追加 rev.4  ・削除用タグ"", ""の処理を忘れていたので、それぞれ""に置き換える処理を追加した。("", ""に倣った処理) rev.5  ・•処理を追加 rev.6  ・年=年と月=月と日=日の変換処理追加。 rev.7  ・“=“と”=”の変換を追加 rev.8  ・― および ―を「―」に変換する処理を追加 rev.9  ・' を ' とすべきところが " になっていたので修正