Eu não tenho idéia do que você está tentando fazer lá, mas então meu sed-fu não é tão strong, então eu acho que você está usando alguma sintaxe arcana que eu não tenho conhecimento. Desde que eu não posso dizer o que está errado com seu sed (mas um palpite é que os caracteres especiais contidos em suas seqüências de substituição ( /
, ?
etc) estão causando problemas), eu vou oferecer uma alternativa perl:
perl -i -pe 'BEGIN{open($f,shift); while(<$f>){chomp; push @F,$_}}
$k=shift(@F); s/(.*SRC=.)([^"]*)/$1$k/' file2 file1
Aqui está a mesma coisa escrita como um script comentado para torná-lo mais claro. No one-liner acima, o -i
faz com que o arquivo de entrada real seja alterado, assim como sed -i
.
#!/usr/bin/env perl
## This is the equivalent of the BEGIN{} block.
## @ARGV is the array of arguments and shift returns
## the first element of it. This is file2 which is
## then opened, each line is read, its trailing \n
## is removed by chomp and it is then added to the @F array.
my $file=shift(@ARGV);
open($f,$file);
while(<$f>){chomp; push @F,$_}
## This is the rest of the oneliner above. The -pe options
## cause the file to be read and each line printed after
## the script is applied. Since the previous block removed
## file2 from @ARGV, this is applied to file1 only.
while (<>) {
## Remove the 1st item of @F. This is a line of file2.
$k=shift(@F);
## Make the substitution. The \ before the " is not
## needed, I just added it here because otherwise, the
## syntax highlighting is broken.
s/(.*SRC=.)([^\"]*)/$1$k/;
## This print is implied by the -p flag
print;
}