Non, c'est aussi efficace que possible. Vous pouvez écrire un programme C qui pourrait faire le travail un peu plus rapidement (moins de temps de démarrage et d'arguments de traitement) mais il tendra probablement vers la même vitesse que sed lorsque les fichiers deviennent volumineux (et je suppose qu'ils sont volumineux si cela prend une minute ).
Mais votre question souffre du même problème que tant d'autres en ce qu'elle présuppose la solution. Si vous deviez nous dire en détail ce que vous essayez de faire plutôt que comment , nous pourrions peut-être vous proposer une meilleure option.
Par exemple, s'il s'agit d'un fichier A que certains autres programmes B traitent, une solution serait de ne pas supprimer la première ligne, mais de modifier le programme B pour le traiter différemment.
Supposons que tous vos programmes s'ajoutent à ce fichier A et que le programme B lit et traite actuellement la première ligne avant de le supprimer.
Vous pouvez réorganiser le programme B pour qu'il n'essaye pas de supprimer la première ligne mais conserve un décalage persistant (probablement basé sur un fichier) dans le fichier A afin que, la prochaine fois qu'il s'exécute, il puisse rechercher ce décalage, traiter la ligne là-bas et mettre à jour le décalage.
Ensuite, à une heure calme (minuit?), Il pourrait effectuer un traitement spécial du fichier A pour supprimer toutes les lignes actuellement traitées et remettre le décalage à 0.
Il sera certainement plus rapide pour un programme d'ouvrir et de rechercher un fichier plutôt que d'ouvrir et de réécrire. Cette discussion suppose que vous avez le contrôle sur le programme B, bien sûr. Je ne sais pas si c'est le cas mais il peut y avoir d'autres solutions possibles si vous fournissez des informations supplémentaires.