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