sed로 이메일 주소를 어떻게 잘라낼 수 있나요?

sed로 이메일 주소를 어떻게 잘라낼 수 있나요?

다음과 같은 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
    
  • POSIXgrep

    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

첫 번째 도메인과 줄 끝 사이에 (공백 제외) 아무것도 없도록 요구합니다.

관련 정보