Usando o grep para imprimir todas as strings correspondentes não separadas por um espaço

3

Estou procurando em um arquivo de texto de e-mails e tentando obter uma lista de um de um determinado domínio.

Estou correndo:

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

Isto encontra as linhas, mas apenas imprime essa "palavra", o que significa que se eu executei o comando nesta lista:

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

Ele retornará

domain.com
adomain.com
domain.com

Eu quero que ele retorne todo o endereço de e-mail com "domain.com":

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

Isso é possível com grep ? Preciso dizer para não tratar períodos ou @ sinais como quebras de palavras.

EDIT: Há um monte de dados irrelevantes na mesma linha que eu preferiria não aparecer.

    
por Parker 29.08.2015 / 18:20

2 respostas

2

Você está procurando

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

em que \S corresponde a caracteres que não são espaços em branco, portanto, neste caso, grep corresponderá a tudo entre espaços em branco com a string "domain.com".

Como alternativa, se você quiser permitir explicitamente apenas @ e . na sequência (com exceção de caracteres alfanuméricos, obviamente):

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

Dessa forma, grep extrairá [email protected] da string [[email protected]] .

    
por 29.08.2015 / 18:28
1

POSIXly:

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