
한 줄에 하나의 이메일 주소가 포함된 텍스트 파일이 있습니다. 각 줄의 도메인 부분은 제거하고 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회에서 무제한 사이, 가능한 한 많이, 필요에 따라 돌려줌 [탐욕]$
문자열 끝에서 위치를 주장
답변3
사용하면 awk
이런 식으로 할 수 있습니다
$awk '{ sub(/\@.*\./,"@"); print }' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
대체(찾기 및 바꾸기)를 사용하면 sub
패턴을 검색하고 바꿀 수 있습니다.