Вы можете использовать следующую команду sed
:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/),\1my_var\2,"
Или, чтобы заменить перекрывающиеся совпадения и все вхождения, используйте (?![^/])
вместо ($|/)
и добавьте флаг g
в конце:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*(?![^/]),\1my_var,g"
См. Демо first regex и демо second regex .
s
здесь означает, что нам нужно заменить строки.Разделителями являются ,
(запятые), так как таким образом нам не нужно экранировать косую черту.
Шаблон (^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/)
соответствует
(^|/)
- группа 1 (\1
): начало строки или /
[[:alpha:]]*[[:digit:]][[:alnum:]]*
- 0+ букв, цифр и затем 0 или более цифр или букв ($|/)
- группа 2 (\2
): конец строки или /
(?![^/])
- это отрицательный прогноз, соответствующий местоположению, за которым сразу же не следует ни один символ, но /
.