Você pode usar sed
dentro das duas substituições de comando para processar os arquivos originais antes de sua listagem dentro dos argumentos do programa (graças ao steeldriver para o padrão simplificado):
program -input "$(sed "s@^\|,@&$source1@g" file1.txt)" -input2 "$(sed "s@^\|,@&$source2@g" file2.txt)"
Alterei o delimitador padrão dos sed
commands ( /
) para @
, porque tanto $source1
como $source2
serão expandidos para um caminho que contenha /
; não é necessário |
para a alternação.
% de problemas nosed
:
-
s
: afirma para executar uma substituição -
@
: inicia o padrão -
^\|,
: corresponde ao início da linha ou a,
character -
@
: interrompe o padrão / inicia a sequência de substituição -
&
: backreference que se expandirá para a correspondência -
$sourceN
: expande para o conteúdo de$sourceN
-
@
: interrompe a string de substituição / inicia os modificadores -
g
: substitui todos os jogos na linha
Exemplo de saída dos comandos sed
para os valores fornecidos de $source1
, $source2
e para o conteúdo fornecido de file1.txt
e file2.txt
:
user@debian ~/tmp % echo $source1
~/Band/folder1/
user@debian ~/tmp % echo $source2
~/Band/folder2/
user@debian ~/tmp % cat file1.txt
A.txt,B.txt,C.txt
user@debian ~/tmp % cat file2.txt
D.txt,E.txt,F.txt
user@debian ~/tmp % sed "s@^\|,@&$source1@g" file1.txt
~/Band/folder1/A.txt,~/Band/folder1/B.txt,~/Band/folder1/C.txt
user@debian ~/tmp % sed "s@^\|,@&$source2@g" file2.txt
~/Band/folder2/D.txt,~/Band/folder2/E.txt,~/Band/folder2/F.txt