GNU sedでは -z で行の区切りをNUL文字にすることができる。

 cat Dockerfile
FROM public.ecr.aws/amazonlinux/amazonlinux:latest
RUN echo hello && \
  yum update && \
  yum install -y && \
  git && \
  curl
 
 sed -z -r 's/(yum install.*git && \\\n)/\1  vim \&\& \\\n/' Dockerfile
FROM public.ecr.aws/amazonlinux/amazonlinux:latest
RUN echo hello && \
  yum update && \
  yum install -y && \
  git && \
  vim && \
  curl
 

こうすると処理の単位が行ごとではなくてファイル全体(NUL文字ごと)となるので、改行をまたいでマッチさせることができる。

single quote の扱いも困ったのでメモ sedでsingle quoteをエスケープする