- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Por si só o termo regex assusta um pouco, ainda mais quando combinado com operações aritméticas que tornam o processo um pouco mais complicado e na maioria dos casos inviáveis. A busca por padrões e substituição de ocorrências sempre nos direciona para a ferramenta sed que apresenta excelentes recursos para tratamento dessas expressões. Porém, em determinadas situações somos forçamos a criar rotinas mais complexas para obter o resultado pretendido e perdemos minutos valiosos nessa tarefa. Mas que situações são essas ? Ou rotinas ? E o que seria inviável fazer usando o comando sed ?
Uma operação aritmética é um exemplo bastante simples e ao mesmo tempo "complexo" para ser solucionado .
Considere o texto a seguir:
O texto é composto por chaves separadas por vírgula e com seus respectivos valores. É claro que vale a pena ressaltar que convenientemente o texto segue um padrão de formatação que em nosso objetivo é irrelevante.
Agora imagine que seja necessário encontrar todos os números dentro da expressão e realizar uma determina operação e substitui-lo pelo resultado, considerando que os valores são aleatórios. Montar tal procedimento utilizando o sed seria um trabalho exaustivo mesmo com script.
A biblioteca regex.sh do projeto bashsrc contém um função chamada regex.fnreplace que auxilia na resolução desse problema.
Protótipo:
A função regex.fnreplace invoca uma determinada função a cada ocorrência encontrada na expressão passando como argumento $1 o padrão casado, substitui-o pelo retorno da função.
Exemplo 1:
Dobrando todos os números encontrados na expressão.
Saida:
Exemplo 2:
Aplicando uma condição para dobrar somente os valores maiores que 30, caso contrário mantém o valor original.
Saída:
Observe que somente os 4 últimos valores sofreram alterações.
Exemplo 3:
Aplica uma condição que verifica se o número encontrado é par e adiciona +10 a esse valor, caso seja ímpar o valor será triplicado.
Saída:
A função regex.fnreplace fornece uma grande flexibilidade no tratamento da expressão por meio de função que permite a construção de rotinas mais elaboradas antes de efetuar a substituição. É importante lembrar que as funções em shell só retornam inteiros, sendo absolutamente necessário o uso do comando echo para retorno dos valores modificados a função chamadora (regex.fnreplace).
Uma operação aritmética é um exemplo bastante simples e ao mesmo tempo "complexo" para ser solucionado .
Considere o texto a seguir:
valor: 10, valor: 15, valor: 20, valor: 25, valor: 30, valor: 35, valor: 40, valor: 45, valor: 50
O texto é composto por chaves separadas por vírgula e com seus respectivos valores. É claro que vale a pena ressaltar que convenientemente o texto segue um padrão de formatação que em nosso objetivo é irrelevante.
Agora imagine que seja necessário encontrar todos os números dentro da expressão e realizar uma determina operação e substitui-lo pelo resultado, considerando que os valores são aleatórios. Montar tal procedimento utilizando o sed seria um trabalho exaustivo mesmo com script.
A biblioteca regex.sh do projeto bashsrc contém um função chamada regex.fnreplace que auxilia na resolução desse problema.
Protótipo:
func regex.fnreplace <[str]pattern> <[str]exp> <[int]count> <[uint]flag> <[func]funcname> <[str]args> ... => [str]
A função regex.fnreplace invoca uma determinada função a cada ocorrência encontrada na expressão passando como argumento $1 o padrão casado, substitui-o pelo retorno da função.
Exemplo 1:
Dobrando todos os números encontrados na expressão.
Saida:
valor: 20, valor: 30, valor: 40, valor: 50, valor: 60, valor: 70, valor: 80, valor: 90, valor: 100
Exemplo 2:
Aplicando uma condição para dobrar somente os valores maiores que 30, caso contrário mantém o valor original.
Saída:
valor: 10, valor: 15, valor: 20, valor: 25, valor: 30, valor: 70, valor: 80, valor: 90, valor: 100
Observe que somente os 4 últimos valores sofreram alterações.
Exemplo 3:
Aplica uma condição que verifica se o número encontrado é par e adiciona +10 a esse valor, caso seja ímpar o valor será triplicado.
Saída:
valor: 20, valor: 45, valor: 30, valor: 75, valor: 40, valor: 105, valor: 50, valor: 135, valor: 60
A função regex.fnreplace fornece uma grande flexibilidade no tratamento da expressão por meio de função que permite a construção de rotinas mais elaboradas antes de efetuar a substituição. É importante lembrar que as funções em shell só retornam inteiros, sendo absolutamente necessário o uso do comando echo para retorno dos valores modificados a função chamadora (regex.fnreplace).
- Gerar link
- X
- Outros aplicativos
Comentários
Postar um comentário