我怎样才能应付每一场不均衡的比赛

  • 本文关键字:一场 不均衡 regex grep
  • 更新时间 :
  • 英文 :


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并且满足退出条件(即当前行是三个后引号,后跟零+空格(时,程序将打印文件名并移到下一个文件。

最新更新