Solução bash + sed complexa:
foobar_replacer.sh script:
#!/bin/bash
head -n1 "$2" # print the first line
while read -r line
do
sed '1d;$d;{s/^foo bar$/'"$line"'/g}' "$2"
done < "$1"
tail -n1 "$2" # print the last line
Uso :
bash foobar_replacer.sh foobar.txt input.txt
A saída:
some text …
% BEGIN
blabla
2 3
blabla
blabla
% END
% BEGIN
blabla
8 9
blabla
blabla
% END
% BEGIN
blabla
1 2
blabla
blabla
% END
some text …
sed detalhes do comando:
1d;$d;
- exclua a primeira e a última linha de input.txt
s/^foo bar$/'"$line"'/g
- substitua a linha que contém foo bar
pelo próximo item $line
de foobar.txt