С AWK:
awk '/^#/ { inblock = 0 }; /^# fish/ { inblock = 1 }; inblock'
Фактически это напечатает все блоки, начинающиеся с # fish
. Чтобы остановиться после первого блока:
awk 'inblock && /^#/ { exit }; /^# fish/ { inblock = 1 }; inblock'
Оба варианта работают, устанавливая для переменной inblock
значение 1 при обработке строк в интересующем блоке; последний оператор inblock
применяет действие по умолчанию (распечатать текущую строку), когда inblock
равен 1.
Я бы использовалperl
:
perl -ne '
BEGIN{
local $/ = undef;
$template = <STDIN>; # slurp file B in
}
chomp;
print $template =~ s/\bvalue1\b/$_/gr' fileA < fileB
Если ваша версия perl
слишком старая для поддержки флага замены r
, вы можете использовать временную переменную:
perl -ne '
BEGIN{
local $/ = undef;
$template = <STDIN>; # slurp file B in
}
chomp;
($out = $template) =~ s/\bvalue1\b/$_/g;
print $out' fileA < fileB