在标记文档中为所有相关图像链接添加url

2024-04-27 23:51:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆带有相对和绝对图像目标的降价文档。e、 g

This is some text

![optional caption](/sub/folder/image.png)

And more text

![](https://example.com/cool_image.png)

我想为每个相对图像预先添加一个URL,例如将上面的更改为

This is some text

![optional caption](https://some-image-host/image-host-subpath/sub/folder/image.png)

And more text

![](https://example.com/cool_image.png)

但最好不要将/sub/folder/硬编码到replace脚本中(我目前就是这样做的)

有没有一种聪明的方法可以用awksed来实现这一点,或者这是一个坏主意,因为降价的边缘案例比预期的多

我在https://pypi.org/project/marko/方面取得了一些进展,例如

import marko
with open("myfile.md") as f: s = f.read()

doc = marko.inline.parser.parse_inline(s)

for i, e in eumerate(doc):
    if type(e) == marko.inline.Image:
        if not e.dest.startswith("http"):
            doc[i].dest = "https://some-image-host/image-host-subpath/" + doc[i].dest

它会查找所有图像并用URL更新每个相对图像的目的地,但我不太确定如何将此内联元素列表重新呈现为降价字符串,我想我会先在这里发布,然后再重新发明轮子,以防有更简单的方法

谢谢你的帮助


Tags: texthttps图像imagehostdocpngis
1条回答
网友
1楼 · 发布于 2024-04-27 23:51:36

此命令将在不更改原始文件的情况下执行此操作:

sed 's_\(^!\[.*\](\)_\1https://some-image-host/image-host-subpath_' <input_file

一旦确认它是您想要的,您只需要在 sed's_...之前,并删除输入_文件之前的<

sed -i 's_\(^!\[.*\](\)_\1https://some-image-host/image-host-subpath_' input_file

该命令的工作方式如下所示:

  • 我使用_作为模式分隔符,而不是更常见的/, 因为这意味着我不必转义路径名中的每个/
  • 此模式^!\[.*\](与要添加路径的位置匹配
  • 我把上面的模式放在\(\)之间,以便记住它 稍后
  • 它被添加回\1,后跟路径

一种更简单的方法是简单地将行的](部分替换为 ])your_url_here

sed 's_](_](https://some-image-host/image-host-subpath/_' <test

但是](组合可能会在其他行中找到 你的文件,所以我选择了更强的测试^!\[.*\](,它只匹配 以![开头的行,在](之前有一些内容

相关问题 更多 >