Вы хотите иметь такие строки, как
sed 's#'/stash/scm/'#&something_from_file2#' file1
Вы можете сделать эти строки с помощью
# Note:
# / is not a delimiter, but part of the path
# % is the delimiter in the current sed-command
# # is the delimiter in the generated command.
sed 's%.*%s#/stash/scm/#\&&#%' file2
Вы можете генерировать эти команды на лету и выполнять их в файле1.
sed -f <(sed 's%.*%s#/stash/scm/#\&&#%' file2) file1
Осталась одна проблема. Обе команды заменят все совпадения.
Я буду использовать одинарную кавычку, указанную после совпадения. Когда что-то ставится перед одиночной кавычкой в /stash/scm/'
, это отличается от файлов соответствия, когда вы ищите строку /stash/scm/'
, включающую кавычку.
Вы хотите сгенерировать строки, подобные
s#(/stash/scm/)(')#\1randomRepo.git\2#
s#(/stash/scm/)(')#\1differentRandomRepo.git\2#
Каждую подстановку следует выполнять только один раз, поэтому мы рассматриваем file2 как одну длинную строку, используя параметр -z
:
sed -rzf <(sed 's%.*%s#(/stash/scm/)('\'')#\\1&\\2#%' file2) file1