Metoden med 'sed' ovan borde vara säker. Varken 'cat' eller 'sed' läser ju själva direkt till/från filen. Det är ju 'bash' som förser dessa två med data via std in/out. 'bash' borde ju rimligen inte läsa och skriva samtidigt i samma fil. 'bash' är ju faktiskt ansvarig för hela exekveringsordningen. File I/O -pipe - file I/O.
Jo, cat läser faktiskt direkt från filen och sed skriver direkt i filen. Och bash vet faktiskt inte exakt vad cat gör, hur den använder sitt argument, om det är en fil eller om cat tänker läsa från filen.
Om nu bash skulle vara "ansvarig" (vilket den inte är) så skulle den ju behöva skapa en temporärfil implicit för varje pipe och köra delarna seriellt. Och då skulle ju bash i princip behöva göra allt det som du verkar vilja undvika i cat/temporärfil/mv-lösningen. Mycket ineffektivt. Dessutom skulle bash behöva göra detta i en massa fall som var onödiga för att vara på den säkra sidan. Om nu bash skulle ta allt "ansvar".
Vad vill du uppnå? Vad som GÅR att göra är att skriva ett enkelt C-program som prependar, men detta program skulle fortfarande behöva skriva och läsa hela filen, så det skulle inte gå mycket snabbare än att köra cat/temporärfil/mv.