Come grep corrispondenza letterale nell'elenco dei domini


1

Ho un file hosts pieno di host, in questo modo:

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

In uno script di shell di cenere (BusyBox), voglio solo una corrispondenza letterale, ne ho

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

Questo corrisponde correttamente a "home.domain.net", ma anche a "home-domain.net" Lo spazio che utilizzo in "$ match $" è di limitarlo all'inizio del nome host, mentre $ è la fine della riga. Come posso abbinare solo il letterale di "home.domain.net"?

Risposte:


0

Come posso abbinare solo il letterale di "home.domain.net"?

Devi fuggire dai .personaggi usando \. Quindi l'unico carattere regexp speciale è il secondo $.

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

Esempio:

$ 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 viene ripetuto nel file host di esempio.

Grep di origine : cerca i file per un testo specifico.


Ulteriori letture


Non è possibile eseguire l'escaping di tutti i punti, ciò significherebbe che dovrei farlo prima su un file di 20 MB di host di grandi dimensioni, quindi cercare e rimuovere nuovamente le barre quando questo file è in uso.
Stargazer,

1
@stargazer Hai frainteso. Hai bisogno di sfuggire alla .nella stringa di ricerca file non i padroni di casa.
DavidPostill

Capito grazie. Funziona perfettamente: grep "$ (echo $ match | sed 's /\./\\./ g') $"
stargazer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.