sed
действительно ограничивает команды переводом строки.Существует ;
, но он не работает для всех команд, в основном это те команды, которые принимают имя файла в качестве аргумента.;
не работает для r
R
или, например, a
.Sed будет читать все после команды a
, поэтому sed интерпретирует как a ${2}}
как одну команду, в результате он не находит включающий }
, потому что он был съеден командой a
.Вам нужен перевод строки:
sed -i "/${1}/{N;N;a ${2}
}" "${3}"
или
sed -i "/${1}/{N;N;a ${2}"$'\n'"}" "${3}"