extrai nomes de nomes longos LDAP

1

Eu tenho este arquivo de log que observa as ações do usuário na rede, o arquivo contém informações do LDAP, lista muito longa como esta:

2015-12-02 10:55:32Z cn=jsmith,ou=sales,dc=company,dc=com
2015-12-02 10:55:54Z cn=bjones,ou=sales,dc=company,dc=com

Eu quero extrair apenas os nomes cn :

jsmith
bjones

como posso fazer isso?

    
por Cadice 09.10.2018 / 21:19

3 respostas

4

usando sed :

sed -e 's/.*cn=\(.*\),ou.*//' file

usando awk

awk -F '[=,]' '{print $2}' file

ou

awk -F 'cn=|,' '{print $2}' file
    
por 09.10.2018 / 21:25
3
% < input
2015-12-02 10:55:32Z cn=jsmith,ou=sales,dc=company,dc=com
2015-12-02 10:55:54Z cn=bjones,ou=sales,dc=company,dc=com
% perl -nle 'print $1 if m/ cn=([^,]+)/' input
jsmith
bjones

nos pressupostos de que uma vírgula não aparecerá no nome do registro (o que torna a expressão regular rápida) e que cn= não aparece em outro lugar no log.

As desvantagens dessa correspondência são que o atributo pode ser muito longo ou conter caracteres que causam problemas em outro lugar. Se isso for uma preocupação, pode ser útil definir estritamente os limites que os atributos cn podem conter e, em seguida, corresponder a essa definição, por exemplo, cn=([a-z][a-z0-9]{1,63}) assumindo que os atributos só podem ser minúsculos, inicie com uma letra e tenha de 2 a 64 caracteres. Isso pode causar problemas se atributos maiores que 64 caracteres aparecerem, mas, por outro lado, não permitirá que backticks ou globs passem por esse código ruim.

    
por 09.10.2018 / 21:25
2

pode ser feito com sed :

sed 's/^.*cn=\([^,]*\).*$//' file

jsmith
bjones

ou grep

grep -oP  '(?<=cn=)[^, ]+' file

ou perl

perl -lne '/cn=(\w*),/ && print $1' file

ou cut & tr

cut -d'=' -f2 file | tr -d 'ou,'
    
por 09.10.2018 / 21:25

Tags