У меня есть некоторые файлы уценки с неработающими относительными ссылками. Я буду sh, чтобы исправить их. Например, у меня есть этот (очень короткий) файл примера:
Please refer to [this first ressource](wrong/path/to/file) and [this other ressource](non/existing/text).
You can also search on [this website](https://example.net).
Обратите внимание, что на одной строке может быть несколько ссылок, а также есть внешние ссылки, которые должны оставаться нетронутыми.
При первом подходе, если мы забудем о внешних ссылках и если правильные ресурсы, на которые указывают относительные ссылки, будут размещены только в подпапке, мы могли бы использовать такой подход:
sed -i -E "s/(\[.*\])\(([^\)]*)\)/\1(subfolder\/\2)/g" document.md
, что превратить мой пример документа в это:
Please refer to [this first ressource](subfolder/wrong/path/to/file) and [this other ressource](subfolder/non/existing/text).
You can also search on [this website](subfolder/https://example.net).
Но у нас есть 2 проблемы:
- Внешние ссылки испорчены
- Правильные ресурсы, на которые ссылаются ссылки: не просто в некоторых подпапках. Правильный путь может быть определен из неправильного, хотя, но мы должны go через всю папку, чтобы сделать это. Это может быть сделано довольно легко, например, в сценарии bash.
Так что мне нужен способ применить функцию к моей группе захвата, прежде чем sed выполнит ее для определения строки замены. Здесь флаг захвата, который мне нужно обработать, \2
.
Любое решение, даже без sed, приемлемо.
Спасибо.