No, non funziona così.

Per riscrivere la riga, dopo averla letta (e quindi superata), devi tornare indietro con il puntatore dello stesso numero di caratteri letti. Lo puoi fare con una

fseek(fd, -x, SEEK_CUR);

prima della fprintf, in cui x è la lunghezza di caratteri della riga.

Ma dato che parliamo di un file di testo sequenziale, con delle righe che non hanno lunghezza fissa, avresti problemi, ad esempio, a rimpiazzare una riga come

1007 vite_lunga 500

in una così

1007 vite_lunga 8

dato che le righe hanno lunghezza diversa.

In questo caso, il metodo che si usa è leggere il primo file interamente e riscriverlo in un secondo file, con la riga modificata, cancellare il primo e rinominare il secondo.