shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Duvida Inserir variável condicional no grep


From: Rodrigo Cunha
Subject: Re: [shell-script] Duvida Inserir variável condicional no grep
Date: Sun, 29 Jun 2014 14:08:39 -0300

Salve Amigos,
Com a ajuda dos comandos do amigo Julio fiz um script maior que executa exatamente o que preciso.
Estou certo que existem maneiras melhores de faze-lo porque basicamente multipliquei o processamento quando lancei loops parecidos para "fugir da sintaxe" do bash.
Caso tenham algo que faz exatamente o que quero com menos loops ou processamentos, serei grato.

Bom segue abaixo o meu script.

#!/bin/bash
#Primeiro  Loop

for i in {1..31}
do j=$i && cat  arq.log |grep -iE "\bJun ( $j\b)" |gzip --stdout >>  novo.arq.log.$j.06.2014.gz
#&& sed -i '/^Jun $j /d'  arq.log
done

#Segundo Loop
for i in {1..31}
do j=$i && cat  arq.log |grep -iE "\bJun ($j\b)" |gzip --stdout >>  novo.arq.log.$j.06.2014.gz
done


#Removendo arquivos
for i in {1..31}
do sed -i "/^Jun ${i} /d"  arq.log
done
#Removendo arquivos
for i in {1..31}
do sed -i "/^Jun  ${i} /d"  arq.log
done








Em 29 de junho de 2014 11:06, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:
 

Uma forma para não complicar a RegExp:
DiasComZero={01..31}
DiasSemZero={1..31}
grep -iE "\bJun ( $DiasSemZeros|$DiasComZeros)\b"  arq.log | gzip --stdout >  novo.arq.log.$j.06.2014.gz

Uma forma complicando a RegExp:
grep -iE "\bJun ? (0?[1-9]|[12][0-9]|3[01])\b"  arq.log | gzip --stdout >  novo.arq.log.$j.06.2014.gz
Abcs,
Julio
@juliobash
Próximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 02 a 06/06
São Paulo 4Linux 21 a 25/07
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.



Em 29 de junho de 2014 02:39, Rodrigo Cunha address@hidden [shell-script] <address@hidden> escreveu:

 

Ola amigos, preciso de uma ajuda.
Estou montando um script para solucionar um problema que tenho com servidores compartilhados antigos.
Bom, a situação é a seguinte, tenho varios servers compartilhados, que não sou o admin, sou incumbido de "apagar incêndios" e um destes incêndios é que o conjunto de servidores nesta situação, muitas das vezes não possui o logrotate configurado e acaba gerando arquivos de log monstruosos com entradas de varias datas diferentes.Para sanar o meu problema estou bolando um script que faça o seguinte.
Leia o arquivo de log arq.log e a partir da leitura faça pequenos arquivos pertinentes as datas do incremento com a string novo.arq.log.stringdedata.gz ja compactando estes apagando , no termino da execução as linhas inseridas nestes novos arquivos deveriam ser apagadas do arquivo principal.

Notei que quando o script tenta executar a função em strings menores que 10 ele não funciona e gera arquivos vazios, frente a isso recriei o script abaixo com o novo grep para sanar, mas agora  os arquivos até são gerados mas não apresentam as entradas que desejo nem mesmo o processo secundario de remover as entradas do arquivo principal.
acredito que meu erro está basicamente aqui : grep -i '"Jun $j "\|"Jun  $j "'
As entradas padrão do meu arquivo de log são do padrão :
Jun 16 09:21:46 ...
Jun  9 16:21:18
assim inseri um espaço em branco na condicional or do grep

Segue abaixo o script :

#!/bin/bash

for i in {1..31}
do j=$i && cat  arq.log |grep -i '"Jun $j "\|"Jun  $j "' |gzip --stdout >  novo.arq.log.$j.06.2014.gz && sed -i '/^Jun '"$j"' /d'  arq.log
done


tambem tentei este :

do j=$i && cat  arq.log |grep -i 'Jun {$j} \|Jun  {$j} ' |gzip --stdout >  novo.arq.log.$j.06.2014.gz && sed -i '/^Jun '"$j"' /d'  arq.log
done

 

Alguém sabe como eu poderia proceder?


--
Atenciosamente,
Rodrigo Silva Cunha - RJ - São Gonçalo
Cel: +55 (0xx21) 7519-7375
e-mail : address@hidden

"Servo do Reino de Deus.
 Servo, do Rei e Líder  Jesus Cristo de Nazaré."





--
Atenciosamente,
Rodrigo Silva
"Servo do Reino de Deus.
 Servo, do Rei e Líder  Jesus Cristo de Nazaré."

reply via email to

[Prev in Thread] Current Thread [Next in Thread]