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