批量向markdown代码块添加语言



我的问题是在我的markdown文件中为每一个代码块添加一种语言
我在嵌套目录中有数百个文件
文件的格式如下:

```language
a
```
Normal text
```
b
```
Normal text
```
c
```
Normal text
```language
d
```

每一个的输出应该是:

```ios
a
```
Normal text
```ios
b
```
Normal text
```ios
c
```
Normal text
```ios
d
```

(在这种情况下,我需要来自我制作的自定义lexer的ios lang(

我使用debian 11并尝试使用sed,我发现这个regex

(```).*(n.*)((n.*)*?)n```

可以帮助查找块,但找不到如何使用它。
我可以使用python来处理更复杂的正则表达式和行为。

我的解决方案

警告!!如果你有三重反勾,这个代码会有不想要的结果!之前一定要备份文件!

  • bashfind所有具有绝对路径的文件(出于某种原因,我不喜欢相对路径,我的懒惰告诉我不要写递归python搜索:D(
  • 带有2个参数的-execpython脚本(文件名和第二个参数,用于将字符串附加到原始文件并保留它,并具有带有原始文件名的新字符串(

我为";添加";(我实际上替换了整个…(;ios";代码块的文本为:

(```).*(n.*)((n.*)*?)n```
replace with
1ios23n```

我真的无法将其转换为sed

import re
import sys, getopt
from shutil import move
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:a:",["ifile=","afile="])
except getopt.GetoptError:
print ('pyre.py -i <inputfile> -a <append_string>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('pyre.py -i <inputfile> -a <append_string>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-a", "--afile"):
outputfile = inputfile + arg
magic(inputfile, outputfile)
def magic(inputfile, outputfile):
regex = r"(```).*(n.*)((n.*)*?)n```"
subst = r"1ios23n```"
move(inputfile, outputfile)
open(inputfile, 'w', encoding="utf-8").write(re.sub(regex, subst, open(outputfile, 'r', encoding="utf-8").read(), 0, re.MULTILINE))
#print(f"{inputfile} DONE")

if __name__ == "__main__":
main(sys.argv[1:])

并且实际找到

find ~+ -name '*.md' -exec python pyre.py -i {} -a .new.md ;

希望这能帮助到解决我同样问题的人。

相关内容

  • 没有找到相关文章