LDAP 긴 이름에서 이름 추출

LDAP 긴 이름에서 이름 추출

네트워크에서 사용자의 작업을 관찰하는 데 사용하는 로그 파일이 있는데, 이 파일에는 다음과 같은 매우 긴 목록의 LDAP 정보가 포함되어 있습니다.

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

cn이름을 추출하고 싶습니다 .

jsmith
bjones

어떻게 해야 합니까?

답변1

사용 sed:

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

사용awk

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

또는

awk -F 'cn=|,' '{print $2}' file

답변2

% < 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

cn=쉼표는 레코드 이름에 나타나지 않으며(정규 표현식이 더 빨라짐) 로그의 다른 곳에도 나타나지 않는다고 가정합니다 .

이 일치의 단점은 속성이 길거나 다른 곳에서 문제를 일으킬 수 있는 문자를 포함할 수 있다는 것입니다. 이것이 문제인 경우 cn속성에 포함될 수 있는 내용의 제한을 엄격하게 정의한 다음 해당 정의와 일치시키는 것이 도움이 될 수 있습니다. 예를 cn=([a-z][a-z0-9]{1,63})들어 속성은 소문자만 가능하고 문자로 시작하며 길이는 2~64자입니다. . 64자를 초과하는 속성이 있는 경우 문제가 발생할 수 있지만 반면에 백틱이나 와일드카드가 잘못된 코드를 통과하여 불행한 일이 발생하는 것을 허용하지 않습니다.

답변3

이는 다음을 통해 수행할 수 있습니다 sed.

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

jsmith
bjones

또는grep

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

또는perl

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

또는 cut&tr

cut -d'=' -f2 file | tr -d 'ou,'

관련 정보