[ context ] Мой скрипт должен заменить semvers нескольких .car
имен на commit sha . Короче говоря, я хотел бы, чтобы каждый dev_CA_1.0.0.car
становился dev_CA_6a8zt5d832.car
ДОБАВЛЕНИЕ commit ша прямо перед тем, как .car
был довольно тривиальным. С этим я получаю dev_CA_1.0.0_6a8zt5d832.car
find . -depth -name "*.car" -exec sh -c 'f="{}"; \
mv -- "$f" $(echo $f | sed -e 's/.car/_${CI_COMMIT_SHORT_SHA}.car/g')' \;
Но мне невероятно сложно ЗАМЕНИТЬ . Какой аспект sed
я неправильно понимаю, пытаясь это:
find . -depth -name "*.car" -exec sh -c 'f="{}"; \
mv -- "$f" $(echo $f | sed -r -E 's/[0-9\.]+.car/${CI_COMMIT_SHORT_SHA}.car/g')
или это
find . -depth -name "*.car" -exec sh -c 'f="{}"; \
mv -- "$f" $(echo $f | sed -r -E 's/^(.*_)[0-9\.]+\.car/\1${CI_COMMIT_SHORT_SHA}\.car/g')' \;
no matches found: f="{}"; mv -- "$f" $(echo $f | sed -r -E ^(.*_)[0-9.]+.car/1684981321531.car/g)
или несколько вариантов:
\
escape ( например, \\.
) (
и )
экранирование (например, \(
) (я где-то читал, что группировка регулярных выражений с sed
требует некоторой осторожности с ()
)
Есть ли более прямой способ сделать это?
Редактировать
$f
Входя в sed
путь выглядит как
./somewhere/some_project_CA_1.2.3.car
./somewhere_else/other_project_CE_9.2.3.car