Não, isso é tão eficiente quanto você conseguirá. Você poderia escrever um programa em C que pudesse fazer o trabalho um pouco mais rápido (menos tempo de inicialização e argumentos de processamento), mas provavelmente tenderá à mesma velocidade que o sed, à medida que os arquivos aumentam (e suponho que sejam grandes se demorar um minuto )
Mas sua pergunta sofre do mesmo problema que tantas outras, pois pressupõe a solução. Se você nos disser em detalhes o que está tentando fazer, então como , podemos sugerir uma opção melhor.
Por exemplo, se esse é um arquivo A que outro programa B processa, uma solução seria não retirar a primeira linha, mas modificar o programa B para processá-lo de maneira diferente.
Digamos que todos os seus programas anexem a esse arquivo A e o programa B atualmente lê e processa a primeira linha antes de excluí-lo.
Você pode reprojetar o programa B para que ele não tente excluir a primeira linha, mas mantenha um deslocamento persistente (provavelmente baseado em arquivo) no arquivo A, para que, da próxima vez que seja executado, ele possa procurar esse deslocamento, processo a linha lá e atualize o deslocamento.
Então, em um horário silencioso (meia-noite?), Ele poderia executar um processamento especial do arquivo A para excluir todas as linhas processadas no momento e definir o deslocamento de volta para 0.
Certamente será mais rápido para um programa abrir e buscar um arquivo, em vez de abrir e reescrever. Esta discussão assume que você tem controle sobre o programa B, é claro. Não sei se é esse o caso, mas pode haver outras soluções possíveis se você fornecer mais informações.