공백으로 구분되지 않은 일치하는 모든 문자열을 인쇄하려면 grep을 사용하십시오.

공백으로 구분되지 않은 일치하는 모든 문자열을 인쇄하려면 grep을 사용하십시오.

이메일 텍스트 파일을 검색하고 특정 도메인에서 보낸 이메일 목록을 얻으려고 합니다.

나는 뛰고있어:

grep -oh "\w*domain.com\w*" file.txt

이것은 행을 찾았지만 해당 "단어"만 인쇄합니다. 즉, 이 목록에서 명령을 실행하면 다음과 같습니다.

foo [email protected] bar
baz [email protected] abc
xyz [email protected] defg
klmn [email protected] ijk
yes [email protected] no

그것은 돌아올 것이다

domain.com
adomain.com
domain.com

"domain.com"이 포함된 전체 이메일 주소를 반환하고 싶습니다.

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

가능합니까 grep? 마침표나 @기호를 단어 분리기로 취급하지 않도록 지시해야 합니다 .

편집: 같은 행에 표시하고 싶지 않은 관련 없는 데이터가 많이 있습니다.

답변1

당신이 찾고있는

grep -ho '\S*domain.com\S*' file

여기서 \S공백이 아닌 문자와 일치하므로 이 경우 grep공백 사이에 "domain.com" 문자열이 있는 모든 항목이 일치됩니다.

또는 명시적으로 및 문자열에서만 허용하려는 경우 @(명백히 영숫자 문자는 제외):.

grep -ho '[[:alnum:].@]*domain.com[[:alnum:].]' file

이 방법으로 grep문자열에서 추출됩니다.[email protected][[email protected]]

답변2

POSIX적으로:

<file tr -cs '[[:alnum:].@-_]' '[\n*]' | grep domain\.com
[email protected]
[email protected]
[email protected]

관련 정보