HTMLマスターテンプレートをサブテンプレートに分割し、各テンプレートを少し修正し、結果ファイルを保存することを任されました。正規表現なしのBashスクリプトでHTML文書を解析する
私はバッシュを使用しているのはなぜ(あなたが質問に取得するには、これを省略することができます)(編集済み)
バッシュを使用するための選択肢はかなり任意です。私はそれがRed Hat 5.5を実行していることを知っているので、私はBashスクリプトを書いています。それはPHPインタプリタを持っていますが、私は同じサーバがPHPを使用するサイトをホストしており、おそらく多くのトラフィックが見られるので、これに対してPHPを使用しないことにしました。したがって、毎回FastCGIソケットを縛るのが怖いです(私はスクリプト実行の頻度を制御しません、何が実行されるかだけを制御します)。また、私が望む通訳(私が実際に知っているスクリプト言語:Perl、Python、PHP、多分Lua)をインストールすることもできます。しかし、これは別の質問です。この質問は、私がBashスクリプトを使いたいと仮定しています。
問題
は、私のようなものに見えるマスターテンプレートファイルがあります。このことから
<!DOCTYPE html PUBLIC .... >
<html lang="en" ...>
<head> ... </head>
<body>
<div id=...></div>
<div id=...></div>
</body>
</html>
を、私は</head>
までの文書の先頭から解析する必要があり、ストリップそのセクションからいくつかの行を追加して1つを追加し、実際のタイトルで<title>
プレースホルダーを置き換え、ファイルに保存します。その後、<body>
と最初に<div>
を別々のファイルとして解析し、最後に2番目の<div>
(これにはページフッターにいくつかの変更を加える必要があります)を解析する必要があります。 </body>
と</html>
は、このテンプレートが実際には2層のテンプレートの一部であるため、破棄されます(置き換えられたページタイトルはSmarty変数を使用してテキストを取得します)。
難問
質問があり、正規表現よりも、これを行うには簡単に/より良い方法はありますか?私はBashがコンパイルコマンド[[ htmlstring =~ "/regex/" ]]
と${BASH_REMATCH}
をマッチしたり置換したりするのを知っていますが、HTMLを正規表現で解析することは一般的にa bad ideaです。
ターゲットサーバにPerlがすでにインストールされているかどうかを再確認します。おそらく(特にPHPも既に存在する場合)、あなたのコードはPerlで簡単に実行できるようになります。また、Webサーバーを経由せずにシェルスクリプトとしてPHPスクリプトを実行することもできます。 –
私はPerlでは非常に効率的ではありませんが(1つまたは2つのスクリプトしか書かれていません)、この場合は 'WWW :: Mechanize'を使用すると思いますか? – darvids0n
いいえ、あなたの説明からは、テキスト(マスターテンプレートファイル)を処理していて、さらにいくつかのテキスト(テンプレートファイルを変更)を生成しているようです。 'WWW :: Mechanize'を使う必要はありません。 –