![공백으로 구분되지 않은 일치하는 모든 문자열을 인쇄하려면 grep을 사용하십시오.](https://linux55.com/image/71966/%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%A0%A4%EB%A9%B4%20grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
이메일 텍스트 파일을 검색하고 특정 도메인에서 보낸 이메일 목록을 얻으려고 합니다.
나는 뛰고있어:
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]