壊れたHTMLタグを見つける方法は?

壊れたHTMLタグを見つける方法は?

すべてのHTMLファイルを見て、例などの誤ったタグがあるかどうかを確認したいと思います。これがHTMLファイルでどのタグが閉じられていないかを確認したいものです<br><hr>

for htmlFile in `ls -f *.html ` ; do
        if `cat $htmlFile | grep -inE "\<br\>"` ; then
           echo "In file $htmlFile there are errors on the following lines: "  >> ~/Desktop/$1_errors.txt
           cat $htmlFile | grep -in "<br>"| cut -d ":" -f1 >> ~/Desktop/$1_errors.txt
           echo "----------------------------------------" >> ~/Desktop/$1_errors.txt
       fi
done

しかし、エラーが発生し、それが私の正規表現のようです。

./script.sh: line 14: 10:<BR: command not found

これは私が受け取るエラーの1つです:)

答え1

シェル構文のエラーを修正してもブラヤムの答え正しく識別された場合いいえこれが実際に働くようにしなさい。せいぜい犯すことになる間違いをつかむことはできますが、壊れていることに気づかないかもしれない種類のダメージを破るタグを安定的に探すgrepを得ることはできません。

これを正しく行うには、HTMLタグを実際に解析して理解できるものを使用する必要があります。タグ構文の問題を指摘するための多くのHTML検証ツールがあります。まず、確認する必要がある最も一般的な状況の1つですtidy。具体的には、次のフラグを使用してファイルから実行してみてください。

 -errors, -e         show only errors and warnings

これは、文書の種類に合わせて閉じられないコンテンツなど、壊れたタブがある場所を示します。

tidyに加えて、HTML構文チェックのための他の多くのオプションがあります。使用W3C検証者いいですね。あなたが何をしても - コンピュータの神を危険にさらす火と硫黄はあなたの上に注がれます。- パターンマッチングのためのgrepなどのhtml構文を解析するために正規表現を使用しないでください。

答え2

問題は次の行にあります。

if `cat $htmlFile | grep -inE "\<br\>"` ; then

これはシェルに次のことを伝えます。

  • 猫ファイル、
  • それを解析し、<br>タグに一致する行を見つけます。
  • 実行出力

問題は最後のステップです。コマンドの出力を実行せずにテストする必要があります。

if grep -inEq "\<br\>" $htmlFile ; then

もちろん、HTMLを解析するには、正規表現ではなく実際のパーサーを使用する必要があります。

関連情報