다음과 같은 emails.txt가 있습니다.
[email protected]
[email protected]
[email protected];es
[email protected]
[email protected]
@pepito.com
그리고 sed 명령을 얻으려면
sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt
[email protected]
[email protected]
하지만 둘 이상의 .com이 포함된 이메일이 계속 표시됩니다.
다음 이메일을 받고 싶지 않습니다.
[email protected]
[email protected];es
[email protected]
@pepito.com
나는 여기에 갇혀 있고 그것을 얻는 방법에 대한 단서가 없습니다.
답변1
를 사용하면 sed
다음을 수행할 수 있습니다.
$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file
[email protected]
[email protected]
@
정규식은 줄 시작 부분에서 하나 이상의 비 문자를 찾은 다음 a @
, 하나 이상의 비 .
문자, .com
그 다음 0 이상의 공백을 찾습니다.
다른 선택:
펄
perl -ne 'print if /^[^@]+@[^.]+\.com\s*$/' file
암소 비슷한 일종의 영양
grep
grep -P '^[^@]+@[^.]+\.com\s*$' file
POSIX
grep
grep -E '^[^@]+@[^.]+\.com\s*$' file
awk
awk '$0~/^[^@]+@[^.]+\.com\s*$/' file
답변2
나는 다음과 같은 것을 사용할 것입니다 :
sed -n -r '/\w+@\w+\.com$/p' emails.txt
[email protected]
[email protected]
모든 이메일 형식을 검색합니다.[email protected]
.com
좀 더 "보편적" 인 것이 필요한 경우 .fr
다음 을 .uk
사용할 수 있습니다.
sed -n -r '/\w+@\w+\.\w+$/p' emails.txt
형식의 모든 이메일을 검색합니다.[email protected]
답변3
표현식은 첫 번째 도메인 뒤에 ((\.\w+)*)?
있는 형식의 추가 시퀀스와 일치합니다 . .xyz
맞추고 싶다면오직해당 주소를 단일 도메인으로 변경한 다음 이를 $
또는 (보다 강력하게) 로 대체하여 적용할 수 있습니다.\s*$
sed -n -r '/\w+@\w+\.\w+\s*$/p' emails.txt
첫 번째 도메인과 줄 끝 사이에 (공백 제외) 아무것도 없도록 요구합니다.