Regular expressão

0

Eu tenho um código que está procurando por um padrão específico em meus arquivos de log. Geralmente começa com ID de Associação = (Isto é o que eu estou procurando entre parênteses). Agora o código que eu fiz até agora está jogando uma sintaxe:

echo "Please enter the UID: ";
read uid

uidAssoc(){
        arg1=$1
        echo $arg1
        for arg1 in $(cat ~/jlog/server.log); do echo $word;done
        | sed 's/.AssociationID = \([*])\'
}
uidAssoc $uid

Alguém pode dar sugestões sobre como corrigir o comando sed e fazê-lo ecoar os resultados encontrados usando-o?

Eu tentei utilizar o grep:

echo "Please enter the UID: ";
read uid

#Will parse through server log files for associaton
uidAssoc(){
        arg1=$1
        echo $arg1
        for arg1 in $(cat ~/jlog/server.log); do echo $word; done|
        grep Association ID ~/jlog/server.log |
        grep -E -o "[a-z0-9]" ~/jlog/server.log
}
uidAssoc $uid
exit

Aqui está minha entrada:

    Please enter the UID:
1.2.124.113532.80.22187.2757.20140503.123509.1190654364

E para saída:

l
e
o
p
i
c
g
e
n
t
e
a
n
r
o
c
e
s
s
e
d
i
n
s
t
a
n
c
e
1
2
1
2
4
1
1
3
5
3
2
8
0
2
2
1
8
7
2
7
    
por ryekayo 16.06.2014 / 19:56

2 respostas

0

Eu descobri uma grande parte disso em casa. Eu tenho o snippet de código abaixo e eu só tenho que mexer com ele para descobrir o resto:

echo "Please enter the UID: ";
read uid

#Will parse through server log files for associaton
uidAssoc(){
        arg1=$1
        echo $arg1
        for arg1 in $(cat ~/jlog/server.log); do echo $word;done |
        awk 'match($i, /Association ID = /){ print substr($i, RSTART,RLENGTH) 
        }
        ' ~/jlog/server.log
}
uidAssoc $uid
exit
    
por ryekayo 16.06.2014 / 22:50
0

Insira isso no seu segmento sed. Sua saída está enviando uma nova linha no final de cada caractere.

Substituir sed (depois de |):

sed ': a; N; $! ba; s / \ n / / g' 's / .AssociationID = ([*]) \'

Isso lerá todo o arquivo em um loop e substituirá a (s) nova (s) linha (s) por um espaço.

Atualização: explicação.

create a label via :a
append the current and next line to the pattern space via N
if we are before the last line, branch to the created label $!ba 
($! means not to do it on the last line (as there should be one final newline)).
finally the substitution replaces every newline with a space on the pattern space
(which is the whole file).

Você pode precisar ajustar isso para sua saída final, mas isso deve curar o problema de um caractere por linha com sed.

    
por RCF 16.06.2014 / 21:34