De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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 determinada string por uma outra em um 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 do shell foi comentado para esclarecer as técnicas de programação.
#!/bin/bash # 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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários