head -n1 file | grep -q "^<?php" || sed -i "1s/^/<?php /" file
A questão está relacionada com question "Unix: Adiciona um Tag ao início de cada arquivo?".
Como posso colocar a tag apenas nos arquivos que não contêm a tag, como <?php , já?
Versão adequadamente modificada do meu responder à pergunta original :
perl -0777 -p -i -e 's/^/<?php/g unless m/^<\?php/' testfile
A execução desse comando com -i.bak em vez de -i preservará um backup dos arquivos originais com uma extensão .bak.
Editar: atualizou a correspondência de m/<?php/ para m/^<\?php/ para fazer corresponder apenas o início do arquivo e para escapar do caractere ? .
Você quer || (OU). Se a mão esquerda for verdadeira, não se incomodará com a mão direita. por exemplo,
test "$(grep PATTERN FILE)" || sed COMMAND FILE