Regex 如何对给定标记之外的标记进行grep

Regex 如何对给定标记之外的标记进行grep,regex,grep,gawk,Regex,Grep,Gawk,我正在尝试使用grep检查文件是否在指定块之外包含标记:{%block js%}。。。{%endblock%} 如果文件不包含{%block page\u content%}元素,则应忽略该元素(并非所有模板都包含js块) 到目前为止,我的表述是: grep -lrPz '(?s){% block (?!js).*? %}(?=.*?<script).*?{% endblock %}' src/ grep-lrPz'(?s){%block(?!js)。*?%}(?=.*?无法指出解决方案

我正在尝试使用grep检查文件是否在指定块之外包含
标记:
{%block js%}。。。{%endblock%}

如果文件不包含
{%block page\u content%}
元素,则应忽略该元素(并非所有模板都包含
js
块)

到目前为止,我的表述是:

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

grep-lrPz'(?s){%block(?!js)。*?%}(?=.*?无法指出解决方案的错误,但另一个选项涉及将记录分隔符设置到开始和结束
js
标记中,并对每个“记录”的内容执行检查


awk-v RS='\{%block js%\\}\\{%endblock%\\}'/[^无法指出您的解决方案有什么问题,但另一个选项涉及在开始和结束
js
标记中设置记录分隔符,并对每个“记录”的内容执行检查


awk-vrs='\{%block js%\\\}\\{%endblock%\\\}'/[^稍微调整一下上面的
grep-lr“src/| xargs--max args=1命令
这现在对我有效。感谢1(CR:)稍微调整一下上面的
grep-lr“src/| xargs--max args=1命令
,现在对我有效。谢谢1(CR:)
{% 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 %}
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