我的问题是在我的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来处理更复杂的正则表达式和行为。
我的解决方案
警告!!如果你有三重反勾,这个代码会有不想要的结果!之前一定要备份文件!
- bash
find
所有具有绝对路径的文件(出于某种原因,我不喜欢相对路径,我的懒惰告诉我不要写递归python搜索:D( - 带有2个参数的
-exec
python脚本(文件名和第二个参数,用于将字符串附加到原始文件并保留它,并具有带有原始文件名的新字符串(
我为";添加";(我实际上替换了整个…(;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 ;
希望这能帮助到解决我同样问题的人。