如何仅更改 sed 捕获组内的 urlencode 空格?

问题描述 投票:0回答:2

我有一些 Markdown 文件,其中包含如下链接:

[Royal Enfield Flying Flea](RE Flying Flea)

我正在尝试将链接的第二部分编码为

[Royal Enfield Flying Flea](RE%20Flying%20Flea)

我正在使用 sed,我认为这是最适合这项工作的工具。我已经使用它在文件中进行了一些其他转换。但我可以使用另一个,比如 awk,如果有人认为它更好的话。

我还设法使用

sed -E 's/\[([A-Za-z0-9 ]*)\]\(([A-Za-z0-9 ]*)\)/\1\2/'
捕获字符串,但我无法找到在所选部分中进行替换的方法。只是为了展示它本来的样子。

如果有人能指出我正确的道路,我很感激。

regex linux sed
2个回答
0
投票

使用 Perl 和适当的模块来转义带有特殊字符的 URL:

$ perl -MURI::Escape -pe 's/(\[.*?\])\((.*?)\)/"$1(" . uri_escape $2 . ")"/e' file
[Royal Enfield Flying Flea](RE%20Flying%20Flea%29

0
投票

你可以使用

sed -E ':a;s/(\[[^][]*]\([^()[:space:]]*)[[:space:]]([^()]*\))/\1%20\2/;ta'
© www.soinside.com 2019 - 2024. All rights reserved.