를 찾고 정규 표현식을 추출하의 이메일 주소에서는/etc/passwd

StackOverflow https://stackoverflow.com/questions/95305

  •  01-07-2019
  •  | 
  •  

문제

대부분의 사용자 이메일 주소와 관련된 자신의 프로필 /etc/passwd.그들은 항상에서 5 분야,내가 잡을 수 있지만,그들은 나타나서 다른 장소에서는 쉼표로 구분한 목록에서의 5 분야이다.

할 수 있는 누군가가 나에게 regex 을 잡아 그냥 이메일 주소 (delimeted 쉼표로 구분)에서 이 파일에서?(내가 사는 것 grep 및 sed 에서 bash 스크립트)

샘플 라인에서 파일

user1:x:1147:5005:User One,Department,,,email@domain.org:/home/directory:/bin/bash
user2:x:1148:5002:User Two,Department2,email2@gmail.com,:/home/directory:/bin/bash
도움이 되었습니까?

해결책

에 대해 무엇:

,([^@]+@[^,:]+)

그룹 포함하의 전자 메일 주소입니다.

[업데이트 기반으로 의견을 주지 않는 항상을 얻을 종료되는 쉼표로]

다른 팁

표준 이메일 일반현 잘 작동합니다:

http://regexlib.com/DisplayPatterns.aspx

수도 있습으로 우수: 웹사이트!

실제로,이처럼 보이 완벽한 작업을 Awk.지금처럼,대부분의 사람들은 나의 말이"내가 전문가에 Awk"진행하기 전에...

awk -F : '{print $5}' /etc/passwd

을 얻을 것입 5 분야에서는':'분야에서 구분/etc/passwd-그것은 아마 5 번째 필드를 원하는.

awk -F , '{print $1}'

을 얻을 것입 제 1 회 분야에서 표준 입력이','그가 그래서 delimimter

awk -F : '{print $5}' /etc/passwd | awk -F , '{print $1}'

을 얻을 것입 첫 번째는 쉼표로 구분된 필드(이름 필드)에서 다섯 번째콜론으로 구분된 필드(이 분야는 모든 종류의 요구됩니다.) 에서는/etc/passwd 파일입니다.

조절 print1 달러 분야와 함께 귀하의 이메일에 있습니다.

심있는 멀리하지 않고 이 관에서 Awk.내가 사용하여 Awk 위한 분리 분야에서 들고 다른 많은 수 없습니다.나는 그것을 찾을 혼란,그리고 그의 누군가로부터 사랑하는 정규 표현식을...

BTW 다섯 번째 필드를으로 알려져 있 GCOS 필드입니다.때때로 철자 GECOS.

sed -r -e "s/^.*[,:]([^,:]+@[^,:]+).*$/\1/g" /etc/passwd

트릭을 할 것입니다

검색에 대한 모든 이메일의 유효한 문자 전후@표시입니다.다음과 같:

[A-z0-9.]+@[A-z0-9.]+

욕심이 일치해야 당겨서 모든 것을 수행 할 수 있습니다,그것은 거지에 쉼표 또는 콜론.

을 확인하는 문자에서 유효한 이메일 주소,하지만.나는 일부를 왼쪽으로(같은+)

sed 's/,*:\/.*//;s/^.*://;s/.*,//' /etc/passwd
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

를 잡으려고 가장 emials

는 방법에 대해 이 표준 RFC2822:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

네.그것입니다.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top