Eu preciso adicionar tags PHP ao redor de um arquivo. É fácil anexá-los usando
find . -exec echo "?>" >> '{}' \;
mas como posso acrescentar a tag <?php
?
text-processing
sed
Gilles 'SO- parar de ser mau'
fonte
fonte
sed
, e permite adicionar um sufixo de backup.-i
não é portátil, a sintaxe difere entre as implementações e quebra os links simbólicos. Seria melhor usar um aplicativo que foi realmente projetado para editar arquivos.Você pode usar um
AWK
filtro como este,Onde
PREFIX
está sua string de prefixo php.fonte
Ainda não posso deixar um comentário, mas para fazer tudo em uma única etapa:
fonte
Você pode fazer isso com um one-liner perl:
As
-0777
forças modo de sorver arquivo, então o arquivo inteiro é lido como uma linha.-p
ativa o loop.-i
permite a edição no local do arquivo.^
indica o início de uma linha.Atualização: conforme indicado nos comentários, você pode optar por gerar automaticamente um backup usando em
-i.bak
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
-i.backup${RANDOM}
, verificar se todos os arquivos foram atualizados corretamente e remover todos os arquivos com essa extensão.fonte
-i
bandeira sem sufixo, avise os leitores que isso significa que você não recebe backup . Para alguns caracteres a mais (-i.bak
), você obtém um backup caso o seu one-liner inclua um erro de digitação. Um erro de digitação bastante simples (digamos, esquecer a-p
bandeira) pode arruinar o dia inteiro.sed
é para editar fluxos - um arquivo não é um fluxo. Use um programa destinado a esse fim, comoed
ouex
. A-i
opçãosed
não apenas não é portátil, mas também quebra todos os links simbólicos que você pode encontrar, uma vez que o exclui e recria, o que é inútil.fonte
ed
para esse fim, mostre isso na sua resposta.Uma alternativa ao que você escreveu para adicionar algo ao final de cada arquivo no diretório (in
bash
):embora eu goste do seu
find
one-liner :)fonte
$FNAME
deve ser$fname
- por convenção, nós capitalizar variáveis de ambiente (pager, EDITOR, SHELL, ...) e variáveis do shell internos (BASH_VERSION, aleatório, ...). Todos os outros nomes de variáveis devem conter pelo menos uma letra minúscula. Esta convenção evita a substituição acidental de variáveis ambientais e internas.Existe a maneira simples
fonte