すべての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を解析するには、正規表現ではなく実際のパーサーを使用する必要があります。