Sed-Ausdruck korrigieren

Sed-Ausdruck korrigieren

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.

verwandte Informationen