이메일 주소가 포함된 텍스트 파일에서 각 줄의 도메인 부분을 제거하는 방법

이메일 주소가 포함된 텍스트 파일에서 각 줄의 도메인 부분을 제거하는 방법

한 줄에 하나의 이메일 주소가 포함된 텍스트 파일이 있습니다. 각 줄의 도메인 부분은 제거하고 TLD 부분은 제거하지 않으려면 어떻게 해야 합니까? 여기서는 TLD를 마지막 점 문자 다음 문자열의 마지막 요소로 정의합니다.

즉, 샘플 입력은 다음과 같습니다.

[email protected]
[email protected]
[email protected]
[email protected]

원하는 출력:

foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

답변1

$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

정규식은 줄의 마지막 마침표까지 @.*[.]모든 것을 캡처합니다 . 우리는 그것을 .@.@

답변2

사용perl

perl -pe 's/(@).*\.(.*)$/\1\2/' foo

또는 인라인

perl -i -pe 's/(@).*\.(.*)$/\1\2/' foo

$ cat foo
[email protected]
[email protected]
[email protected]
[email protected]

$ perl -pe 's/(@).*\.(.*)$/\1\2/' foo
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

정규식 설명

/(@).*\.(.*)$/

  • 1차 캡쳐 그룹 ( @)

    @@문자 그대로 문자와 일치합니다 .

  • .*모든 문자와 일치합니다(개행 제외).

    수량자: *0회에서 무제한 사이, 가능한 한 많이, 필요에 따라 돌려줌 [탐욕]

    \..문자 그대로 문자와 일치합니다 .

  • 2차 캡쳐 그룹 ( .*)

    .*모든 문자와 일치합니다(개행 제외).

    수량자: *0회에서 무제한 사이, 가능한 한 많이, 필요에 따라 돌려줌 [탐욕]

  • $문자열 끝에서 위치를 주장

정규식 시각화

Debuggex 데모

답변3

사용하면 awk이런 식으로 할 수 있습니다

$awk '{ sub(/\@.*\./,"@"); print }' file


foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk

대체(찾기 및 바꾸기)를 사용하면 sub패턴을 검색하고 바꿀 수 있습니다.

관련 정보