Discussion:
[shell-script] grep como parâmetro de função
jrsreis@yahoo.com.br [shell-script]
2017-11-22 02:21:33 UTC
Permalink
Olá pessoal,

Mais um probleminha daqueles que só vocês sabem resolver. Bem estou tentando realizar buscas realizando função, porém utilizando o comando grep como parâmetro, pois é não sei se isso é possível. Mas, creio que vocês podem me ajudar.
Digamos que há um arquivo tipo de log, chamado, por exemplo, monitora.log com o seguinte conteúdo:

$ vim monitora.log
2017-11-21 23:01:00 Inclusão do usuário Fulano
2017-11-21 23:02:13 Alteração do registro do usuário Fulano
2017-11-21 23:02:15 Erro na alteração do usuário Fulano - Falha de permissão.
2017-11-21 23:03:25 Exclusão de usuário
2017-11-21 23:04:25 Inclusão de usuário
2017-11-21 23:05:44 Inclusão de usuário
2017-11-21 23:05:46 Erro na inclusão do usuário Beltrano - Faltando o campo nome a preencher.

E, temos o seguinte sciprt para procurar qualquer tipo de erro, como por exemplo:

$ vim lerlog.sh
#!/bin/bash

LOG="monitora.log"

mostrar()
{
$1 $LOG

# Ou realizando busca por dia, e em seguida o parâmetro
grep "2017-11-21" $LOG | $1
}

procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}

procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}

procuraErroInclusao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na inclusão\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na inclusão'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ inclusão'"
}

echo -e "\n Procurando erro de alteração de usuários ..."
procuraErroAlteracao

echo -e "\n Procurando erro de inclusão de usuários ..."
procuraErroInclusao
----

Só que as passagens de parâmetros, no caso, utilizando o grep não está funcionando. Há alguma solução para isso?


Agradeço a todos.
'Ernander (Nander)' ernander@gmail.com [shell-script]
2017-11-22 10:02:23 UTC
Permalink
Nao see SE entendi direito, mas pelo q vi VC "Nao esta usando grep" comp
parametro e sim passando parametros pro Grep

Na sua funcao mostrar ponha o grep assim:

mostrar()
{
grep $1 $LOG
}

E faça o Teste

On Nov 22, 2017 00:27, "***@yahoo.com.br [shell-script]" <
shell-***@yahoogrupos.com.br> wrote:



Olá pessoal,

Mais um probleminha daqueles que só vocês sabem resolver. Bem estou
tentando realizar buscas realizando função, porém utilizando o comando grep
como parâmetro, pois é não sei se isso é possível. Mas, creio que vocês
podem me ajudar.
Digamos que há um arquivo tipo de log, chamado, por exemplo,
monitora.log com o seguinte conteúdo:

$ vim monitora.log
2017-11-21 23:01:00 Inclusão do usuário Fulano
2017-11-21 23:02:13 Alteração do registro do usuário Fulano
2017-11-21 23:02:15 Erro na alteração do usuário Fulano - Falha de
permissão.
2017-11-21 23:03:25 Exclusão de usuário
2017-11-21 23:04:25 Inclusão de usuário
2017-11-21 23:05:44 Inclusão de usuário
2017-11-21 23:05:46 Erro na inclusão do usuário Beltrano - Faltando o campo
nome a preencher.

E, temos o seguinte sciprt para procurar qualquer tipo de erro, como por
exemplo:

$ vim lerlog.sh
#!/bin/bash

LOG="monitora.log"

mostrar()
{
$1 $LOG

# Ou realizando busca por dia, e em seguida o parâmetro
grep "2017-11-21" $LOG | $1
}

procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}

procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}

procuraErroInclusao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na inclusão\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na inclusão'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ inclusão'"
}

echo -e "\n Procurando erro de alteração de usuários ..."
procuraErroAlteracao

echo -e "\n Procurando erro de inclusão de usuários ..."
procuraErroInclusao
----

Só que as passagens de parâmetros, no caso, utilizando o grep não está
funcionando. Há alguma solução para isso?


Agradeço a todos.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-11-22 11:11:32 UTC
Permalink
Em cada linha de grep, vc tem de executar 2 passos. Da esquerda para a
direita como faz qq interpretador os passos seriam:

- Chamar a função;
- Executar o grep.

Ora, essa ordem está trocada, precisamos priorizar a execução do grep e
isso se faz de duas formas:

- Com construção do tipo $(CMD) onde CMD é o comando a ser priorizado
(essa é a mais moderna);
- Colocando CMD entre crases (essa é única compatível com o Bourne
Shell).

Então, para seu prg funcionar, vc deve trocar:

mostrar "grep \"Erro na inclusão\""

por:

mostrar "$(grep \"Erro na inclusão\")"

Abraços,
Julio
* Atenção! Últimos treinamentos presenciais do ano! *
Cidade Local Período
Brasilia LinuxSolutions <http://bit.ly/cursoshelljulioneves> 27/11-01/12
São Paulo 4Linux
<https://www.4linux.com.br/curso/programacao-em-shell-script> 05-09/12
Rio de Janeiro LinuxSolutions <http://bit.ly/cursoshelljulioneves> 11-15/12

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% mais*
*barato que qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by ***@yahoo.com.br [shell-script]
Olá pessoal,
Mais um probleminha daqueles que só vocês sabem resolver. Bem estou
tentando realizar buscas realizando função, porém utilizando o comando grep
como parâmetro, pois é não sei se isso é possível. Mas, creio que vocês
podem me ajudar.
Digamos que há um arquivo tipo de log, chamado, por exemplo,
$ vim monitora.log
2017-11-21 23:01:00 Inclusão do usuário Fulano
2017-11-21 23:02:13 Alteração do registro do usuário Fulano
2017-11-21 23:02:15 Erro na alteração do usuário Fulano - Falha de permissão.
2017-11-21 23:03:25 Exclusão de usuário
2017-11-21 23:04:25 Inclusão de usuário
2017-11-21 23:05:44 Inclusão de usuário
2017-11-21 23:05:46 Erro na inclusão do usuário Beltrano - Faltando o
campo nome a preencher.
$ vim lerlog.sh
#!/bin/bash
LOG="monitora.log"
mostrar()
{
$1 $LOG
# Ou realizando busca por dia, e em seguida o parâmetro
grep "2017-11-21" $LOG | $1
}
procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}
procuraErroAlteracao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na alteração\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na alteração'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ alteração'"
}
procuraErroInclusao()
{
echo "Primeiro exemplo:"
mostrar "grep \"Erro na inclusão\""
echo -e "\nSegundo exemplo:"
mostrar "grep 'Erro na inclusão'"
echo -e "\nTerceiro exemplo:"
mostrar "grep 'Erro\ na\ inclusão'"
}
echo -e "\n Procurando erro de alteração de usuários ..."
procuraErroAlteracao
echo -e "\n Procurando erro de inclusão de usuários ..."
procuraErroInclusao
----
Só que as passagens de parâmetros, no caso, utilizando o grep não está
funcionando. Há alguma solução para isso?
Agradeço a todos.
jrsreis@yahoo.com.br [shell-script]
2017-11-22 14:10:53 UTC
Permalink
Olá Júlio,

Tentei aplicar tua indicação, mas não funcionou. Na função "mostrar" tentei até dar um echo em $1, tipo "echo $1", mas não mostrar nada.
O que pode ser?

Obrigado pela atenção.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-11-22 14:23:37 UTC
Permalink
A pressa é uma meleca. Li muito rapidamente e entendi tudo errado... :(

Vc está procurando por "palavra" no log, qdo deveria estar procurando por
palavra. Tire toda as \" ou então ponha um eval antes do $1 da função

Abraços,
Julio
* Atenção! Últimos treinamentos presenciais do ano! *
Cidade Local Período
Brasilia LinuxSolutions <http://bit.ly/cursoshelljulioneves> 27/11-01/12
São Paulo 4Linux
<https://www.4linux.com.br/curso/programacao-em-shell-script> 05-09/12
Rio de Janeiro LinuxSolutions <http://bit.ly/cursoshelljulioneves> 11-15/12

*Damos treinamento em sua empresa **com certificado*
*e nota fiscal **por **um preço, **no mínimo, 50% mais*
*barato que qualquer curso.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by ***@yahoo.com.br [shell-script]
Olá Júlio,
Tentei aplicar tua indicação, mas não funcionou. Na função "mostrar"
tentei até dar um echo em $1, tipo "echo $1", mas não mostrar nada.
O que pode ser?
Obrigado pela atenção.
jrsreis@yahoo.com.br [shell-script]
2017-11-22 18:37:48 UTC
Permalink
Falae Júlio,

Tranquilo, sei completamente como são essas coisas de pressa. Eu também tenho estado na pressão, heheheh.
Bem, sobre as alternativas sugeridas, infelizmente, não deram certo.

Tentei essa:
mostrar "$(grep vel efetuar a gera)"

só que nesse caso, acho que tem que have as aspas, pois são palavras com string, ou seja, teria que ser grep "vel efetuar a gera" $LOG

como, também, tentei assim:
eval $1 $LOG

Mas, não deu.

Mas, obrigado pelo apoio.

Loading...