Как удалить одну строку из репозитория с помощью sed

My /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 вызвал эту ошибку, но как я могу ее исправить?

1
задан 9 January 2017 в 03:52

1 ответ

Выполните следующие действия:

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

Так как в этом примере нет /, я мог бы использовать более простой [ f14].

(Спасибо за @steeldriver за идеи улучшения.)

6
ответ дан 23 May 2018 в 03:01
  • 1
    Хорошие очки @steeldriver, я улучшил свой ответ. Кстати, даже с командой s он мог использовать более простой шаблон, как /xenlism-wildfire/s/.*//. Не уверен, что стоит упомянуть об этом, пользователь, кажется, новичок. – janos 26 December 2016 в 01:08

Другие вопросы по тегам:

Похожие вопросы: