Seu código está bem, eu provavelmente faria isso como uma solução rápida. É mais eficiente sair do sed imediatamente após a impressão: sed -n '1{p;q}'
para evitar a leitura do arquivo inteiro sem motivo.
Agora, a parte mais difícil é ler o arquivo duas vezes para obter as duas primeiras linhas. Você poderia simplesmente usar builtins de shell:
{ read -r var1; read -r var2; } < infile
e, em seguida, mantenha sed -i '1,2d'
ou simplesmente use tail -n +3 > outfile; mv outfile infile
.
A melhor maneira de fazer isso em uma única passagem é ler as duas variáveis com read
e, em seguida, cat the rest:
{ read -r var1; read -r var2; cat; } < infile > outfile
Note que estou salvando a saída em outro arquivo (e então você pode copiá-lo de volta). Isso não é tão "elegante" quanto a modificação inplace com sed
, mas é mais seguro, e faz a mesma quantidade de escrita. Esta última versão também só lê o arquivo uma vez, não três vezes.