Я использую sed с переменными в скрипте bash для разбора изображений уценки ![Legend](path/image.png)
, и я пытаюсь захватить группу символов одновременно.
Синтаксис для "нормального" регулярного выражения был бы таким: 1) легенда изображения, 2. путь к изображению: !\[(.*)\]\((.*)\)
Например, из ![[Muybridge, Eadward](https://www.britannica.com/biography/Eadweard-Muybridge/images-videos)(1887)](https://i.imgur.com/p2pwfme.jpg)
даст:
- легенда:
[Muybridge, Eadward](https://www.britannica.com/biography/Eadweard-Muybridge/images-videos)(1887)
- путь:
https://i.imgur.com/p2pwfme.jpg
Но нормальное регулярное выражение комплексируется внутри sed с использованием переменной.
Вот фрагмент сценария, который анализирует изображения в документе уценки (мой вопрос касается последней команды sed):
for filename in "$3"*; do
COUNTER=$[$COUNTER +1]
echo "<b>${filename%.*}</b> will be renamed <b>${GET[id]}-img${COUNTER}.*</b><br>"
sed -i -e "s@${filename%.*}@${GET[id]}\-img${COUNTER}@g" ../${GET[id]}.md
mv ${filename%.*}.${filename##*.} ${GET[id]}-img${COUNTER}.${filename##*.}
sed -i -e "s@!['('.*')'](.*${GET[id]}\-img${COUNTER}@![\1](media\/${GET[id]}\-img${COUNTER}@g" ../${GET[id]}.md
done
Вы увидите, что:
- Я использую двойные кавычки, так как sed вызывает переменные
- Я использую
@
разделитель вместо /
- Мне не нужно экранировать
[
]
в этом контексте (это подтверждается)
- Я пытался избежать скобок, захватывающих группу с помощью
'('.*')'
, но это не работает, также пытался с \(.*\)
Поэтому мне интересно, как захватить группу (как правильно использовать ()
согласно синтаксису регулярных выражений) в таком контексте: bash + sed + variable.