Die Hauptursache für ein Problem gefunden - Grund dafür ist, dass sed standardmäßig nicht mit mehreren Zeilen übereinstimmt.
Hier finden Sie auch einige Lösungen: Wie kann ich sed verwenden, um eine mehrzeilige Zeichenfolge zu ersetzen?
Arbeitslösung für meinen speziellen Fall (Perl statt Sed):
perl -0777 -piE 's/#ifndef ([a-zA-Z_][a-zA-Z_0-9]+)(\r?\n)#define \1/#pragma once\2#ifndef \1\2#define \1/gs' `find . -type f -name "*.h"`