1

grep を使用して、ファイルに指定されたブロック<script>のタグが含まれているかどうかを確認しようとしています: .{% block js %} ... {% endblock %}

ファイルに{% block page_content %}要素が含まれていない場合は、無視する必要があります (すべてのテンプレートに実際にjsブロックが含まれているわけではありません)。

私がこれまでに持っている表現は次のとおりです。

grep -lrPz '(?s){% block (?!js).*? %}(?=.*?<script).*?{% endblock %}' src/

私が間違っていることはありますか?

検出する必要があるファイルは次のとおりです。

{% block page_content %}
  {{ parent() }}
  <script> console.log("Hello world"); </script>
{% endblock %}

検出されるべきではないファイルは次のとおりです。

{% block who_knows %}
  {{ parent() }}
  <script> console.log("Hello world"); </script>
{% endblock %}

{% block page_content %}
  {{ parent() }}
{% endblock %}
{% block js %}
  <script> console.log("Hello world"); </script>
{% endblock %}

{% block js %}
  <script> console.log("Hello world"); </script>
{% endblock %}
{% block page_content %}
  {{ parent() }}
{% endblock %}
4

1 に答える 1

1

ソリューションの何が問題なのかを指摘することはできませんが、別のオプションには、 のレコードセパレーターを開始タグと終了jsタグに設定し、各「レコード」の内容をチェックすることが含まれます

awk -v RS='\\{% block js %\\}|\\{% endblock %\\}' '/<script>[^<]*<\/script>/ &&
        (RT != "{% endblock %}" || prevRT != "{% block js %}"){bad++};
        /\{% block page_content %\}/{content++};
          {prevRT=RT};
          END{if(bad && content)print FILENAME":bad file"}' file.txt
于 2013-11-08T16:34:02.970 に答える