it-swarm.com.de

So entfernen Sie eine Zeile aus dem Repository mit sed

Mein /etc/apt/sources.list enthält diese Zeile:

deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/ 

Ich möchte diese Zeile über sed in der Befehlszeile entfernen, also habe ich diesen Code ausprobiert, aber einen Fehler zurückgegeben!

$ Sudo sed 's:deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/::g' /etc/apt/sources.list
sed: -e expression #1, char 75: unknown option to `s'

Ich denke, das Symbol : nach http hat diesen Fehler verursacht, aber wie kann ich ihn beheben?

6
Ali Razmdideh

Sie können ein beliebiges * -Symbol verwenden, um die Such-/Ersetzungszeichenfolgen abzugrenzen, die nicht mit den Symbolen in Konflikt stehen in den Zeichenfolgen, sofern Sie sie konsequent verwenden, z.

Sudo sed 's#deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/##g' /etc/apt/sources.list

Dies verringert die Notwendigkeit, ein problematisches Zeichen zu entkommen (was durch Verwendung von \ als Fluchtweg geschehen könnte).

* Ich bin sicher, dass es Ausnahmen gibt, insbesondere wenn ältere Versionen von sed verwendet werden, aber mir sind keine Einschränkungen bekannt.

9
user4556274

Laufen Sie wie folgt:

Sudo sed -i '\%^deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb%d' /etc/apt/sources.list

Die Probleme, die ich behoben habe:

  • Verwenden Sie das -i -Flag, um die Datei direkt zu ändern. Ohne dies würde der Befehl nur die Ausgabe von sed auf dem Bildschirm ausgeben, ohne die Datei zu aktualisieren.
  • Anstatt s/// zu verwenden, um die Zeile durch einen leeren String zu ersetzen, habe ich den Befehl d verwendet, um die Zeile zu löschen.
  • Für den Mustervergleich habe ich anstelle von /.../\%...% verwendet, da % nicht im Muster erscheint. Mit / müssten alle Vorkommen von / ersetzt werden.

Beachten Sie, dass möglicherweise ein einfacherer Filter ausreichend ist. Wenn Sie beispielsweise wissen, dass xenlist-wildfire in der Datei eindeutig ist, funktioniert auch dieser einfachere Befehl:

Sudo sed -i '/xenlism-wildfire/d' /etc/apt/sources.list

Da es in diesem Beispiel keinen / gibt, könnte ich den einfacheren /.../ Filter verwenden.

(Danke für @ steeldriver für die Verbesserungsvorschläge.)

6
janos