sed -i "1s/^/<?php /" file
(O -i
é para edição no local.)
Mais versão portátil:
ed file <<!
1s/^/<?php /
wq
!
Eu preciso adicionar tags PHP em torno de um arquivo. É fácil anexá-los usando
find . -exec echo "?>" >> '{}' \;
mas como posso prefixar a tag <?php
?
Você pode usar um filtro AWK
como este,
awk '{if(NR==1) printf "%s%s","PREFIX",$0; else print $0}' testfile > newfile
Onde PREFIX
é sua string de prefixo php.
Ainda não posso deixar um comentário, mas fazer tudo de uma só vez:
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
Você pode fazer isso com um perl one-liner:
perl -0777 -p -i -e "s/^/hey /g" testfile
O -0777
força o modo de arrastar arquivos, portanto, o arquivo inteiro é lido como uma linha. -p
permite o loop. -i
permite a edição no local do arquivo. ^
indica o começo de uma linha.
$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
Atualização: Conforme indicado nos comentários, você pode optar por gerar um backup automaticamente usando -i.bak
em vez de -i
. Isso fornece segurança adicional em caso de erros no seu comando. O argumento para -i
se torna o sufixo do backup.
Ao atualizar um monte de arquivos, você pode executar o comando com -i.backup${RANDOM}
, verificar se todos os arquivos foram atualizados corretamente e, em seguida, remover todos os arquivos com essa extensão.
sed
é para editar fluxos - um arquivo não é um fluxo. Use um programa destinado a esse propósito, como ed
ou ex
. A opção -i
para sed
não é apenas não portável, ela também irá quebrar quaisquer links simbólicos que você possa encontrar, já que essencialmente a deleta e recria, o que é inútil.
for file in foo bar baz; do
ed -s "${file}" << EOF
0a
<?php
.
w
EOF
done
Uma alternativa ao que você escreveu para adicionar algo ao final de cada arquivo no diretório (em bash
):
for FNAME in *
do
echo "?>" >> $FNAME
done
embora eu goste de seu find
one-liner:)
Existe o caminho simples
echo "startstr$(cat filename)endstring" > filename.new
Tags text-processing sed