Como grep literal corresponde na lista de domínios

1

Eu tenho um arquivo hosts cheio de hosts, assim:

127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some

Em um script shell cinza (BusyBox), eu só quero correspondência literal (es), tenho

match=home.domain.net
grep " $match$" file

Isso corresponde corretamente a "home.domain.net", mas também "home-domain.net" O espaço que eu uso em "$ match $" é limitá-lo ao início do nome do host, enquanto o $ é o final da linha. Como posso corresponder apenas ao literal "home.domain.net"?

    
por stargazer 18.02.2017 / 16:21

1 resposta

0

Como posso corresponder apenas ao literal "home.domain.net"?

Você precisa escapar dos caracteres . usando \ . Então o único caractere regexp especial é o segundo $ .

match=home\.domain\.net
grep " $match$" file    

Exemplo:

$ cat file
127.0.0.1 home-domain.net
127.0.0.1 here.home-domain.net
127.0.0.1 home-domain.netn
127.0.0.1 home.domain.net
127.0.0.1 home.domain.net.some
$ match=home\.domain\.net
$ grep " $match$" file
127.0.0.1 home-domain.net
127.0.0.1 home.domain.net

Nota:

  • 127.0.0.1 home-domain.net é repetido no seu arquivo de host de exemplo.

Fonte grep - Pesquisar arquivo (s) para texto específico.

Leitura Adicional

por 18.02.2017 / 16:46