regex - 我怎样才能为每一个不均匀的比赛进行grep?
问题描述
Markdowns 围栏代码块看起来像这样
```
Here is the code
in many lines
```
或像这样:
```text
Here is the code
in many lines
```
“文本”指定应用于突出显示的语言。
我想在一个平面目录上运行并找到所有包含没有指定语言的围栏代码块的文件。如何在没有指定语言的情况下找到受保护的代码块?
我试过的
以下是我想要的超集:
$ grep -rIE -m1 "\`\`\`[[:space:]]*$" *
问题是结束部分。本质上,这会找到所有具有围栏代码块的文件。但是我如何为每个不均匀的三次反引号grep?
我的猜测是我必须使用 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 并且满足退出条件(即当前行是三个反引号后跟零+空格)时,程序打印文件名并移动到下一个文件。
推荐阅读
- python - 如何组合多个输入数据集(数据框)?
- windows - 如何获取 Windows 中的每个磁盘并根据 DeviceType 进行过滤,然后在其旁边添加磁盘的大小,用逗号分隔?
- javascript - 包含动态元素的 div 后的按钮,没有触摸 HTML
- sql - 将每日 CSV 文件从电子邮件仅更新值导入 SQL Server
- html - CSS渐变悬停在不同大小的图像上
- java - 错误:不兼容的类型:意外的返回值 Char 与 String 比较
- php - 重复数字数组,php
- c# - 如何为此代码块编写单元测试
- java - Citrus 框架“[520] 没有匹配的常量” - 自定义 HTTP 状态代码
- google-cloud-datastore - Google 数据流 - 使用数据存储选项连接到数据存储会出现错误