Ich verwende „Hosts“-Dateien aus verschiedenen Quellen und um die Blockierung einiger Sites aufzuheben, verwende ich den folgenden SED-Code:
sed -i '/0.0.0.0 internet.com/s/^/#/g' /tmp/hosts
Ergebnis:
Es setzt # vor
0.0.0.0 internet.com
aber auch
0.0.0.0 internet.com.site
Ich muss es reparieren.
Antwort1
Wenn Sie nur ganze Zeilen abgleichen möchten, geben Sie ganze Zeilen an:
sed -i '/^0.0.0.0 internet.com$/s/^/#/g' /tmp/hosts
Das ^
bedeutet, dass Sie direkt loslegen, so wie Sie es bereits im Suchmuster zum Ersetzen verwenden.
Das $
bedeutet Zeilenende.
Es wird also ^0.0.0.0 internet.com$
nur eine Übereinstimmung mit einer Zeile gefunden, die genau ist 0.0.0.0 internet.com
, nicht mit einer Zeile, die es nur als Teilzeichenfolge enthält.
Antwort2
Hier ist, was ich verwende. Es verarbeitet auch Einträge, die Aliase enthalten
$ cat -vet hosts
0.0.0.0 internet.com internet$
0.0.0.0 internet.com^Iinternet$
0.0.0.0 internet.com$
0.0.0.0 internet.com.site$
$ sed 's/^0.0.0.0 internet.com\( \|\t\|$\)/# &/' hosts
# 0.0.0.0 internet.com internet
# 0.0.0.0 internet.com internet
# 0.0.0.0 internet.com
0.0.0.0 internet.com.site
Natürlich könnte es leicht verbessert werden, um bei Bedarf mehrere Leerzeichen verarbeiten zu können.