Por que a adição de dois pontos quebra este padrão grep?

5

Eu executei uma pesquisa com grep , mas não funciona como eu esperava. Eu tenho as seguintes linhas em um arquivo:

blacklists/redirector/domains:needyoutube.com
lacklists/redirector/domains:openyoutube.com
blacklists/redirector/domains:proxy-youtube.com
blacklists/redirector/domains:proxytoyoutube.com
blacklists/redirector/domains:streamyoutube.com
blacklists/redirector/domains:unblockyoutube.com

Quando eu corro:

grep ':youtube.com'

Não obtenho resultados. Os seguintes trabalhos:

grep 'youtube.com'

Como posso escapar dos dois pontos ( : )? Barra invertida (grep '\: youtube.com') não funciona. Eu uso o RHEL 5, grep (GNU grep) 2.5.1.

Atualização: Eu esqueci as entradas que eu queria grep, estas existem também:

./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br

Eu quero apenas obter os campos que contêm o nome de domínio exato. Por isso, quero colocar as listas negras vinculadas ao youtube.com, por isso uso ": youtube.com".

Da lista acima (youtube.com, youtube.com.br), eu só deveria ter o youtube.com, mas não recebo nada.

Eu não estava claro o suficiente, desculpe.

    
por user74952 16.11.2011 / 15:42

3 respostas

4

Parece que "listas negras / redirecionador / domínios" é, na verdade, um nome de arquivo, não parte do conteúdo do arquivo. grep ':youtube.com' funciona bem:

% cat test.txt
./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br
blacklists/redirector/domains:needyoutube.com
lacklists/redirector/domains:openyoutube.com
blacklists/redirector/domains:proxy-youtube.com
blacklists/redirector/domains:proxytoyoutube.com
blacklists/redirector/domains:streamyoutube.com
blacklists/redirector/domains:unblockyoutube.com
% grep ':youtube.com' test.txt
./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br

Se você quiser encontrar linhas que começam com "youtube.com", use grep -R '^youtube\.com' path/to/dir

    
por 17.11.2011 / 11:55
9

Grep está bem. Esse arquivo não contém nenhuma linha com ": youtube.com".

Se você quiser combinar todas as linhas com : , use

grep ":.*youtube\.com"

UPD:

Como você atualizou sua pergunta, eu preciso tentar responder a segunda parte.

From the list above (youtube.com, youtube.com.br), I only should get youtube.com, but I don't get anything.

Seu grep ':youtube.com' realmente fez o que você precisa. E se for um caminho, a opção -R ajuda você.

    
por 16.11.2011 / 15:53
1

Como outros apontaram, os caracteres de dois pontos que você está vendo não estão nos arquivos que estão sendo pesquisados pelo grep, eles estão na saída do grep. Quando o grep encontra uma linha correspondente em um arquivo, ele exibe algo como: filename:line

O problema que você está tendo é combinar arquivos que contenham youtube.com, mas NÃO proxyyoutube.com, certo?

No seu caso, parece que a string que você está procurando está no começo de uma linha, então você pode fazer algo como:

grep * "^youtube.com"

O caractere de seta para cima corresponderá apenas no início de uma linha, para que você possa evitar a correspondência em "extrastuffhereyoutube.com"

    
por 25.09.2017 / 18:49