Wie grep Literal Match in Liste der Domänen

800
stargazer

Ich habe eine Hosts-Datei voller Hosts:

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 einem Ash-Shell-Skript (BusyBox) möchte ich nur wörtliche Übereinstimmungen haben

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

Dies stimmt richtig mit "home.domain.net" überein, aber auch mit "home-domain.net". Der von "$ match $" verwendete Speicherplatz beschränkt sich auf den Anfang des Hostnamens, während $ das Zeilenende ist. Wie kann ich nur das Literal von "home.domain.net" finden?

1

1 Antwort auf die Frage

0
DavidPostill

Wie kann ich nur das Literal von "home.domain.net" finden?

Sie müssen die .Zeichen mit entziehen \. Das einzige spezielle Regex-Zeichen ist dann das zweite $.

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

Beispiel:

$ 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 

Hinweis:

  • 127.0.0.1 home-domain.net wird in Ihrer Beispielhostdatei wiederholt.

Source grep - Suchdatei (en) nach spezifischem Text.


Lesen Sie weiter

Es ist nicht möglich, alle Punkte zu entgehen, das heißt, ich müsste es zuerst auf einer 20 MB großen Datei von Hosts tun, dann danach suchen und die Schrägstriche wieder entfernen, da diese Datei verwendet wird. stargazer vor 7 Jahren 0
@stargazer Du missverstehst. Sie müssen das `.` im ** Suchstring ** und nicht die Hosts-Datei mit Escapezeichen versehen. DavidPostill vor 7 Jahren 1
Habe ich, danke. Das funktioniert perfekt: grep "$ (echo $ match | sed's /\./\\./ g ') $" stargazer vor 7 Jahren 0