ed é 'o editor de texto padrão'. Não é realmente ideal para usar na edição do dia-a-dia, mas é prontamente programável .
ed file.c <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
O primeiro comando exclui da primeira linha, até e incluindo a primeira linha contendo */ (tanto o * quanto o / precisam ser escapados). O segundo comando é uma inserção simples - o i diz ed para entrar no modo 'inserir', enquanto . informa por si próprio ed para sair do modo de inserção. w significa 'gravar' e salva o arquivo; q significa 'sair'. A coisa toda está dentro de um 'here-document', que começa e termina com um EOF (isso é arbitrário; você pode usar qualquer string que quiser).
Isso pode facilmente ser usado em um loop:
for f in ./*.{c,h}; do ed "$f" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
done
Se você quiser recursividade (ou seja, trabalhar em subdiretórios), use shopt -s globstar e use ./**/*.{c,h} no comando acima ou use find e um loop while:
find . -name '*.c' -name '*.h' -print0 | while read -d '' f; do ed "$f" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
done
Se você puder fazer isso muitas vezes, talvez valha a pena colocá-lo em um script.
#!/bin/sh
ed "$1" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
Se você nomear algo como copyright.sh, coloque-o em algum lugar em seu $ PATH e torne-o executável, então você pode simplesmente:
shopt -s globstar
for f in ./**/*.{c,h}; do copyright.sh "$f"; done