를 찾고 정규 표현식을 추출하의 이메일 주소에서는/etc/passwd
문제
대부분의 사용자 이메일 주소와 관련된 자신의 프로필 /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
해결책
에 대해 무엇:
,([^@]+@[^,:]+)
그룹 포함하의 전자 메일 주소입니다.
[업데이트 기반으로 의견을 주지 않는 항상을 얻을 종료되는 쉼표로]
다른 팁
실제로,이처럼 보이 완벽한 작업을 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])+)\])
네.그것입니다.:)