Trocando TAGS em arquivos de telas

trocatags

Um processo muito comum ao se realizar atualizações na base do SAGE, são as mudanças de pontos analógicos, digitais de estado e até mesmo comandos. Depois de tudo pronto na base fica no ar que arquivos de tela serão atualizados. As dicas que apresentarei aqui servem tanto para estações pequenas que geralmente possuem poucos arquivos, tais como: telas de unifilares, telas de medição, telas de arquitetura, telas de status/monitoramento entre outras, como para estações que concentram todos as informações do sistema de gerenciamento da empresa, como é o caso dos centros de operação remotos.

Para o caso que lhe apresento, considero uma base que recebi recentemente para integrar ao nosso Centro de Operações (COR). Após integrar todos os pontos novos na base do SAGE, percebi que haviam TAGs que não seguiam o padrão adotado.

Considerando o caso, a quantidade de 27 TAGS alteradas na base do SAGE. O padrão das TAGs era CPAL211MIFA, CPAL211MIFB e CPAL211MIFV, sendo CP o código da subestação, AL2 o equipamento relacionado ao nível de tensão em 13.8kV, 11 o índice do equipamento, MI a grandeza medida, e A, B e V a fase medida. O parâmetro F antes das fases era a parte errada da TAG e foi removida. Ficando a padronização CPAL211MIA, CPAL211MIB e CPAL211MIV. Como falei acima, eram 27 TAGs, pois atingiam os índices de equipamentos 11 até o 19.

Após explanar, o problema e corrigir na base de dados do SAGE, precisamos identificar nossos arquivos de telas que precisam de atualização.

O comando que irá lhe ajudar nessa identificação é o grep. O grep é um aplicativo para linha de comando de sistemas Unix/Linux que faz buscas no conteúdo dos arquivos (ou input) procurando linhas que respeitem a expressão regular mencionada.

Pois bem, executei o seguinte comando em uma janela do terminal: grep -r -l "CPAL2..MIF" $TELAS

O comando irá pesquisar de formar recursiva, ou seja, em todo o diretório $TELAS e seus sub-diretórios e listará o caminho completo do arquivos que contiverem o conteúdo relacionado pela expressão regular “CPAL2..MIF”, o caso dos dois pontos (..) ele considerará na pesquisa qualquer caractere entre AL2 e MIF, porém somente a quantidade de 2. Poderia ser restringido a “CPAL21[1-9]MIF[ABV]”, nesse caso somente caberiam as 27 TAGs. Recomendo estudo de expressões regulares.

Após executar o comando temos a seguinte saída no output:

sage@srv1:~/sage > grep -r -l "CPAL2..MIF" $TELAS

/export/home/sage/sage/config/cor/telas/unifilares/uni_cp
/export/home/sage/sage/config/cor/telas/medicao/med_cp
/export/home/sage/sage/config/cor/telas/medicao/med_geral

Foram encontrados 3 arquivos que corresponde a nossa pesquisa. Com isso você poderá abrir cada arquivo individualmente usando o SigDraw ou no editor de texto de sua preferência e alterar cada TAG na mão. Lembre-se de fazer backup antes dos seus arquivos.

Como as terminações MIFA, MIFB e MIFV não são padrões e sim MIA, MIB e MIV usarei outro aplicativo chamado sed. O sed é o mesmo que Stream EDitor ou editor de fluxo.

Muito utilizado nos sistemas tipo Unix. Ao contrário dos editores convencionais, o sed atua em linha de comandos ou em shell script.

Com o sed, irei mandar localizar e alterar tudo o que for MIFA, MIFB e MIFV para MIA, MIB e MIV no arquivos localizados com o aplicativo grep. Ou simplesmente, trocar tudo o que for MIF por MI. Primeiramente, renomearei o meu arquivo original para arquivo_old e após isso uso o comando sed.

mv $TELAS/uni_cp $TELAS/uni_cp_old
sed '/^SigMedida/s/MIF/MI/g' < $TELAS/unifilares/uni_cp_old > $TELAS/unifilares/uni_cp

O comando sed irá pesquisa e alterar de MIF para MI todas as linhas que começarem por SigMedida tendo como entrada o arquivo uni_cp_old (original) e gerando pela saída um novo arquivo chamado uni_cp com as alterações.

Com isso basta executar o mesmo comando sed nos demais arquivos encontrados. Agora imagine fazer isso de forma rápida e em uma única linha de comando. Lembre-se de sempre fazer backup.

find $TELAS -type f -exec sed -i '/SigMedida/s/MIF/MI/g' '{}' \;

Nesse caso usando o aplicativo find e passamos como parâmetros o tipo (-type) para considerar apenas arquivos e o -exec para disparar o aplicativo sed todas as vezes que localizar um arquivo no diretório $TELAS.

Você também poderá automatizar isso utilizando um shellscript de sua preferência e usar sua imaginação para atender suas necessidades.

É isso. Vamos em frente!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *