Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Global Replace
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 20 de Maio de 1997
Este shell script pode vir a ser útil. O que ele faz é simplesmente trocar todas as ocorrências de determinado string por uma outra em uma número de arquivos especificados na linha de comando, aceitando inclusive wildcards.
Por exemplo, o comando
% repl rubens joao *
substituiria todas as ocorrências de "rubens" por "joao" em todos os arquivos do diretório corrente.
Além disto, este shell script aborda alguns pontos interessantes com relação à programação shell.
O código da shell foi comentado para esclarecer as técnicas de programação.
#! /bin/sh # Teste para verificar se todos os argumentos foram passados # na linha de comando (mínimo de 3, duas strings (de, para) e # nome(s) do(s) arquivo(s). Se nao, sai e envia mensagem de erro if [ $# -lt 3 ] then echo "Uso $0: DE-argumento PARA-argumento arquivos" >&2 exit 1 fi # atribui à variável DE o valor da string a ser substituída # e desloca as variáveis ($3 passa a ser $2, $2 passa a ser $1) # O deslocamento das variáveis é feito com o comando shift DE=$1; shift # atribui à variável PARA o valor final da string # $1 agora é o argumento de número 2, string destino. PARA=$1; shift # Na entrada do laço, $1 representa o nome do primeiro arquivo # onde serão efetuadas as alterações until [ $# -eq 0 ] # Continua no laço até que o número de argumentos seja igual a zero # ou seja, até que não existam mais arquivos a serem processados. do # Testa a existência do arquivo if [ ! -r $1 ] then echo "no file $1" >& 2;shift # A modificação nos arquivos é feita com o comando sed, que redireciona # a saída para um arquivo temporário, que irá possuir o nome do shell ($0) # seguido do número de identificação do processo ($$) else sed -e "s/$DE/$PARA/g" $1 > /tmp/$0$$ mv /tmp/$0$$ $1; echo "alteracoes efetuadas em $1" >&2 shift fi done
Dica Humorística :-)
A produtividade de Schubert
Um executivo de uma companhia ganhou um convite para um concerto da Sinfonia Inacabada de Schubert. Como estaria impossibilitado de comparecer, passou o convite para o Gerente de MÚtodos e Procedimentos. Na manha seguinte, o executivo perguntou se ele tinha gostado e, ao inves de comentarios, recebeu o seguinte memorando :
1. Por um periodo consideravel de tempo, os musicos com oboe nao tinham nada para fazer. Sua quantidade deveria ser reduzida e seu trabalho redistribuido pela orquestra, evitando estes picos de inatividade. 2. Todos os doze violinos tocavam notas identicas. Isto parece ser uma duplicidade desnecessaria de esforcos. O contingente nesta secao deveria ser drasticamente cortado. Se um alto volume de som e requerido, isto pode ser obtido atraves de um amplificador. 3. Muito esforco foi envolvido em tocar semitons. Isto parece ser um preciosismo desnecessario e seria recomendavel que todas as notas fossem arrendondadas para o tom mais proximo. Se isto fosse feito, poder-se-ia utilizar estagiarios em vez de musicos profissionais. 4. Nao havia utilidade pratica em repetir com os metais a mesma passagem ja tocada pelas cordas. Se toda esta redundancia fosse eliminada, o concerto poderia ser reduzido de duas horas para apenas vinte minutos.
Sumarizando as observacoes anteriores, podemos concluir que, se Schubert tivesse dado um pouco mais de atencao a estes pontos, talvez tivesse tido tempo de acabar sua sinfonia.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.





