Команда sed для замены слова из одного файла всей строкой другого файла [закрыто]

С AWK:

awk '/^#/ { inblock = 0 }; /^# fish/ { inblock = 1 }; inblock'

Фактически это напечатает все блоки, начинающиеся с # fish . Чтобы остановиться после первого блока:

awk 'inblock && /^#/ { exit }; /^# fish/ { inblock = 1 }; inblock'

Оба варианта работают, устанавливая для переменной inblock значение 1 при обработке строк в интересующем блоке; последний оператор inblock применяет действие по умолчанию (распечатать текущую строку), когда inblock равен 1.

1
18.04.2018, 14:42
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
1
27.01.2020, 23:43

Теги

Похожие вопросы