Мой /etc/apt/sources.list
содержит эту строку:
deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/
Я хочу удалить ту строку через sed
в командной строке, таким образом, я попробовал этот код, но ошибку возвратов!
$ 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'
Я предполагаю символ :
после http
вызванный эта ошибка, но как я могу зафиксировать его?
Можно использовать любого* символ для разграничивания поиска/строк замены, который не конфликтует с символами в строки, пока Вы последовательно используете его, например:
sudo sed 's#deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb/##g' /etc/apt/sources.list
Это уменьшает потребность выйти из проблематичного символа (который мог быть сделан с помощью \
как Escape).
*I уверен, что существуют исключения, особенно при использовании более старых версий sed
, но я не знаю ни о каких ограничениях от руки.
Выполненный как это:
sudo sed -i '\%^deb http://downloads.sourceforge.net/project/xenlism-wildfire/repo deb%d' /etc/apt/sources.list
Проблемы я зафиксировал:
-i
флаг для изменения оперативного файла. Без этого команда просто распечатала бы вывод sed
на экран, не обновляя файл.s///
для замены строки пустой строкой я использовал d
команда для удаления строки./.../
, Я использовал \%...%
, потому что %
не появляется в шаблоне. С /
, все случаи /
должен был бы быть заменен.Обратите внимание, что возможно более простой фильтр мог бы быть достаточно хорошим. Например, если Вы знаете это xenlist-wildfire
уникально в файле, затем эта более простая команда будет работать также:
sudo sed -i '/xenlism-wildfire/d' /etc/apt/sources.list
С тех пор в этом примере существует нет /
, Я мог использовать более простое /.../
фильтр.
(Спасибо за @steeldriver для идей улучшения.)