Nein, effizienter geht's nicht. Sie könnten ein C-Programm schreiben, das die Aufgabe etwas schneller erledigen könnte (weniger Startzeit und Verarbeitung von Argumenten), aber es wird wahrscheinlich zur gleichen Geschwindigkeit wie sed tendieren, wenn die Dateien groß werden (und ich nehme an, sie sind groß, wenn es eine Minute dauert).
Aber Ihre Frage leidet unter dem gleichen Problem wie so viele andere, dass sie die Lösung voraussetzt. Wenn Sie uns im Detail sagen würden was die Sie zu tun versuchen, anstatt wie können wir Ihnen vielleicht eine bessere Lösung vorschlagen.
Wenn es sich zum Beispiel um eine Datei A handelt, die von einem anderen Programm B verarbeitet wird, wäre eine Lösung, die erste Zeile nicht zu entfernen, sondern das Programm B so zu ändern, dass es sie anders verarbeitet.
Angenommen, alle Ihre Programme hängen an diese Datei A an, und Programm B liest und verarbeitet derzeit die erste Zeile, bevor es sie löscht.
Sie könnten das Programm B so umgestalten, dass es nicht versucht, die erste Zeile zu löschen, sondern einen dauerhaften (wahrscheinlich dateibasierten) Offset in der Datei A beibehält, so dass es beim nächsten Lauf diesen Offset aufsuchen, die Zeile dort verarbeiten und den Offset aktualisieren kann.
Dann könnte es zu einer ruhigen Zeit (Mitternacht?) eine spezielle Verarbeitung der Datei A durchführen, um alle derzeit verarbeiteten Zeilen zu löschen und den Versatz wieder auf 0 zu setzen.
Für ein Programm ist es sicherlich schneller, eine Datei zu öffnen und zu suchen, als sie zu öffnen und neu zu schreiben. Diese Diskussion setzt natürlich voraus, dass Sie die Kontrolle über Programm B haben. Ich weiß nicht, ob das der Fall ist, aber vielleicht gibt es andere mögliche Lösungen, wenn Sie weitere Informationen zur Verfügung stellen.