Markdown围栏代码块看起来像这个
```
Here is the code
in many lines
```
或者像这样:
```text
Here is the code
in many lines
```
"文本"指定了应用于突出显示的语言。
我想在一个平面目录上运行,找到所有包含没有指定语言的隔离代码块的文件。如何在没有指定语言的情况下找到受保护的代码块?
我尝试了什么
以下是我想要的超集:
$ grep -rIE -m1 "```[[:space:]]*$" *
问题出在结尾部分。从本质上讲,这会找到所有有围栏代码块的文件。但我该如何应对每一次不均衡的三次反弹呢?
我的猜测是,我必须对完整的代码块进行grep。可以保证在三个回溯之后有一个换行符或一种语言。
所以我尝试了以下两种:
grep -rIzPo -m1 "```\n(.*?)```" *
grep -rIzEo -m1 "```\n(.*?)```" *
它发现了几个病例,但至少漏掉了一个。我不知道为什么。
问题:两个代码块
我有很多带有多个代码块的文件,例如:
```python
a = "Hello"
b = "Stackoverflow"
print(f"{a} {b}")
```
and
```python
print("foobar")
```
请注意,我不希望与此内容匹配的文件!到目前为止,我尝试的所有正则表达式都匹配
```
and
```python
print("foobar")
```
我认为用gawk会更容易。
awk 'BEGINFILE{f=0} /^```/{f=!f}
f&&/^```s*$/{print FILENAME;nextfile}' *
f
表示上一场比赛是平的还是不平的。它在每个文件的开头重置,并被每个匹配项否定。当f
为1并且满足退出条件(即当前行是三个后引号,后跟零+空格(时,程序将打印文件名并移到下一个文件。