você está aqui: Home  → Arquivo de Mensagens

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.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script