Mon /etc/apt/sources.list
contient cette ligne:
deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/
Je veux supprimer cette ligne via sed
en ligne de commande, j'ai donc essayé ce code mais renvoie une erreur!
$ 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'
Je suppose que le symbole :
après http
a provoqué cette erreur, mais comment puis-je y remédier?
Vous pouvez utiliser n’importe quel symbole * pour délimiter les chaînes de recherche/remplacement qui n’entrent pas en conflit avec les symboles in les chaînes, tant que vous l’utilisez de manière cohérente, par exemple:
Sudo sed 's#deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/##g' /etc/apt/sources.list
Cela réduit le besoin d'échapper à un caractère problématique (ce qui pourrait être fait en utilisant \
comme échappement).
* Je suis sûr qu'il existe des exceptions, en particulier si vous utilisez des versions plus anciennes de sed
, mais je n'ai pas connaissance de limitations.
Courez comme ça:
Sudo sed -i '\%^deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb%d' /etc/apt/sources.list
Les problèmes que j'ai résolus:
-i
pour modifier le fichier sur place. Sans cela, la commande imprimerait simplement le résultat de sed
à l'écran, sans mettre à jour le fichier.s///
pour remplacer la ligne par une chaîne vide, j'ai utilisé la commande d
pour supprimer la ligne./.../
, j’ai utilisé \%...%
, car %
n’apparaît pas dans le motif. Avec /
, toutes les occurrences de /
devraient être remplacées.Notez qu'un filtre plus simple pourrait suffire. Par exemple, si vous savez que xenlist-wildfire
est unique dans le fichier, cette commande plus simple fonctionnera également:
Sudo sed -i '/xenlism-wildfire/d' /etc/apt/sources.list
Comme dans cet exemple, il n'y a pas de /
, je pourrais utiliser le filtre plus simple /.../
.
(Merci pour @ steeldriver pour les idées d'amélioration.)