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 回答